python - Python的multiprocessing.Pool进程全局作用域问题
问题描述
如何将全局变量更改STOP
为True
?据我了解,问题出在其他进程的范围上,但我不知道如何实现。
from multiprocessing import Pool
from time import sleep
STOP = False
def get_nums(state, block_size):
pages = [i for i in range(state*block_size + 1, (state + 1)*block_size + 1)]
return pages
def square(x):
sleep(1)
if x == 19:
global STOP
STOP = True
print(f'squared\t{x}')
return x*x
if __name__ == '__main__':
state = 0
result = []
while not STOP:
with Pool() as p:
res = p.map(square, get_nums(state, 5))
result.extend(res)
print(f'STOP = {STOP}')
state += 1
print(result)
解决方案
...
STOP = Value('b', 0)
...
if x == 19:
STOP.value = 1
...
while not STOP.value:
...
与多线程不同,每个进程都在完全独立的环境中执行。新进程复制当前进程的状态,但从那时起它们是独立的——就像从印刷机出来的书一样,但是如果你写在一本书上,其他同名的书就不会得到你的涂鸦. 您需要能够“分享涂鸦”的魔法——由multiprocessing
.
推荐阅读
- java - 如何在 JPA 中建立 OneToMany 关系
- java - 如何在不破坏 onMapReady 活动的情况下修复地图对象中的 nullPointerException
- ios - 在反应本机ios上自定义手势
- java - 使用 Spring Batch 生成的 CSV 中的奇怪数字
- typescript - 无法取消订阅 ionic 3 应用程序中的 observables
- arrays - 如何使用值和公式制作数据数组
- java - 如何在Java中获取主题所属的代理
- php - Firestore 批量拆分
- python - Keras 验证生成器评估指标
- php - 使用私有存储桶授权的 Backblaze Storage B2 PHP 下载