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

2024-04-25 16:53:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

from multiprocessing import Process

code = False

def func():
    global code
    code = True

pro = Process(target=func)
pro.start()

while code == False:
    pass

pro.terminate()
pro.join()

print('Done!')

运行此命令时,屏幕上不会显示任何内容。当我通过按CTRL-C终止程序时,堆栈跟踪显示while循环正在执行。你知道吗


Tags: 代码false应用程序时间code互联网sleep逻辑
1条回答
网友
1楼 · 发布于 2024-04-25 16:53:10

Python有几个并发库:threadingmultiprocessingasyncio(以及更多)。你知道吗

multiprocessing是一个库,它使用子进程绕过python无法并发运行CPU密集型任务的问题。要在不同的multiprocessing.Process之间共享变量,请通过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()

相关问题 更多 >