0

以下は、この問題を示すコードです。これは一例に過ぎないことに注意してください。もっと複雑なアプリケーションで同じロジックを使用していますが、スリープを時間として使用することはできません。プロセス1では変数を変更するために時間がかかります。インターネット接続。あるスレッドで変数を変更して別のスレッドで変数をチェックする方法は?

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,multiprocessingおよびasyncio(以上)

multiprocessingは、サブプロセスを使用して、CPU集約的なタスクを同時に実行するPythonの能力を迂回するライブラリです。異なる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() 
関連する問題