如何在一个线程中修改变量并在另一个线程中检查?

时间:2017-02-19 05:32:25

标签: python multiprocessing race-condition python-multiprocessing

以下是演示此问题的代码。请注意,这只是一个例子,我在一个更复杂的应用程序中使用相同的逻辑,在那里我不能使用sleep作为时间量,它将需要process1来修改变量,取决于速度互联网连接。

@Html.DisplayFor(()=> item.Releasedate)

在运行时,屏幕上不显示任何内容。当我终止程序时,按CTRL-C,堆栈跟踪显示正在执行while循环。

1 个答案:

答案 0 :(得分:1)

Python有一些并发库:threadingmultiprocessingasyncio(以及更多)。

multiprocessing是一个库,它使用子进程来绕过python无法同时运行CPU密集型任务。要在不同的multiprocessing.Process es之间共享变量,请通过multiprocessing.Manager()实例创建它们。例如:

import multiprocessing

import time


def func(event):
    print("> func()")
    time.sleep(1)
    print("setting event")
    event.set()
    time.sleep(1)
    print("< func()")


def main():
    print("In main()")

    manager = multiprocessing.Manager()
    event = manager.Event()
    p = multiprocessing.Process(target=func, args=(event,))
    p.start()

    while not event.is_set():
        print("waiting...")
        time.sleep(0.2)

    print("OK! joining func()...")
    p.join()

    print('Done!')


if __name__ == "__main__":
    main()