Python的多处理。池进程全局范围问题



如何将全局变量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'squaredt{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)

使用 multiprocessing.Value

...
STOP = Value('b', 0)
...
if x == 19:
    STOP.value = 1
...
while not STOP.value:
...

与多线程不同,每个进程都在完全独立的环境中执行。新进程复制当前进程的状态,但从那时起它们是独立的——就像从印刷机出来的书一样,但如果你写成一本书,其他同名的书就不会得到你的涂鸦。您需要将"共享涂鸦"的魔法 - 由各种multiprocessing类实施的魔法。

相关内容

  • 没有找到相关文章

最新更新