在一个pool.apply_async内创建globals()不需要共享
时间: 2024-03-25 19:37:54 浏览: 64
即使在`pool.apply_async`内创建`globals()`,也无法实现在多个进程之间共享变量。这是因为`pool.apply_async`会在新的进程中执行函数,新的进程会拥有自己的`globals()`,与原始进程中的`globals()`不同。因此,如果您需要在多个进程之间共享变量,仍然需要使用`multiprocessing.Manager()`或`multiprocessing.Queue()`等方式来创建共享变量。如果您只是需要在`pool.apply_async`内部使用全局变量,可以直接在函数内定义全局变量,例如:
```python
import multiprocessing
def worker():
# 在函数内部定义全局变量
global my_global_var
my_global_var = "Hello world!"
if __name__ == "__main__":
# 创建进程池
pool = multiprocessing.Pool(processes=4)
# 在进程池中执行任务
pool.apply_async(worker)
# 关闭进程池
pool.close()
pool.join()
# 打印全局变量
print(my_global_var)
```
在这个例子中,我们在`worker()`函数内部定义了一个全局变量`my_global_var`。由于`my_global_var`是一个全局变量,因此在`worker()`函数中可以直接访问和修改它。在主进程中,我们打印了`my_global_var`的值,可以看到它已经被更新了。请注意,虽然我们在函数内部定义了全局变量,但它仍然只能在该进程中访问,不能在其他进程中共享。
阅读全文