0

下面是演示問題的代碼。請注意,這只是一個例子,我在一個更復雜的應用程序中使用了相同的邏輯,我不能使用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://stackoverflow.com/questions/17377426/shared-variable-in-pythons-multiprocessing)?我需要第二個意見 –

+0

@ user2357112你能舉一個例子代碼嗎? –

回答

1

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() 
相關問題