在一个pool.apply_async内创建多个global不需要共享的示例
时间: 2024-03-25 17:38:00 浏览: 110
在一个 `pool.apply_async` 内创建多个不需要共享的全局变量实例时,可以使用 Python 的 `multiprocessing.Manager` 模块来实现。具体方法如下:
1. 在主进程中创建一个 `multiprocessing.Manager` 实例:
```
from multiprocessing import Manager
manager = Manager()
```
2. 在 `pool.apply_async` 内部创建多个不需要共享的全局变量实例:
```
def func(args):
global_var1 = manager.Namespace()
global_var2 = manager.Namespace()
# do something with global_var1 and global_var2
pool.apply_async(func, args)
```
在这里,我们使用 `manager.Namespace()` 方法来创建不需要共享的全局变量实例,这样每个子进程都会拥有自己的全局变量实例,互不干扰。
相关问题
在multiprocessing.Pool().apply_async()运行的函数内无法识别globals()对象
对于`multiprocessing.Pool().apply_async()`运行的函数,它是在一个新的进程中执行的,因此不能识别主进程中的`globals()`对象。如果需要在新进程中使用某些全局变量,可以先将这些变量传递给`apply_async()`函数中的`args`或`kwds`参数。示例如下:
```python
import multiprocessing
global_var = 1
def func(arg1, arg2):
print(arg1, arg2, global_var)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
result = pool.apply_async(func, args=('hello', 'world'), kwds={'global_var': global_var})
pool.close()
pool.join()
```
在上面的示例中,`global_var`是一个全局变量,但是在`func()`函数中无法识别。我们将它作为关键字参数传递给`apply_async()`函数,然后在`func()`函数中就可以使用了。
阅读全文