如何将全局变量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)
答案 0 :(得分:0)
...
STOP = Value('b', 0)
...
if x == 19:
STOP.value = 1
...
while not STOP.value:
...
与多线程不同,每个进程在完全独立的环境中执行。新流程会复制当前流程的状态,但是从那时起它们是独立的-就像印刷机出版的书籍一样,但是如果您写成一本书,则其他标题相同的书也不会乱涂乱画。您需要一种可以“共享涂鸦”的魔法-由multiprocessing
的各个类实现的魔法。