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

问题描述:

下面是演示问题的代码。请注意,这只是一个例子,我在一个更复杂的应用程序中使用了相同的逻辑,我不能使用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循环。

+4

进程不是线程。该过程正在设定自己的独立全球变量。如果你想在'multiprocessing'进程之间进行通信,使用'multiprocessing'提供的工具和文档。 – user2357112

+0

@ user2357112这个问题可以被标记为重复:[共享变量在Python的多重处理](http://*.com/questions/17377426/shared-variable-in-pythons-multiprocessing)?我需要第二个意见 –

+0

@ user2357112你能举一个例子代码吗? –

Python有一些并发库:threading,multiprocessingasyncio(以及更多)。

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()