如何修改一个线程中的变量并在另一个线程中检查它?
问题描述:
下面是演示问题的代码。请注意,这只是一个例子,我在一个更复杂的应用程序中使用了相同的逻辑,我不能使用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循环。
答
Python有一些并发库:threading
,multiprocessing
和asyncio
(以及更多)。
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()
进程不是线程。该过程正在设定自己的独立全球变量。如果你想在'multiprocessing'进程之间进行通信,使用'multiprocessing'提供的工具和文档。 – user2357112
@ user2357112这个问题可以被标记为重复:[共享变量在Python的多重处理](http://*.com/questions/17377426/shared-variable-in-pythons-multiprocessing)?我需要第二个意见 –
@ user2357112你能举一个例子代码吗? –