2016-08-06 10 views
1

これはノブの質問です。バックグラウンドプロセスは他の計算を行い、その結果を変数に保存しながら、メインプロセスを実行して処理する必要があります。メインスレッドが望むときは、変数に格納されている最後の値を読み取ることができます。以前に格納された値はすべて忘れてしまいます。バックグラウンドプロセスが数えているとしましょう:私は今の時点で何番号にあるのか知りたいです。Pythonで、プロセスをバックグラウンドで実行してメインスレッドからステータスを取得してください

from multiprocessing import Process, Pipe 
import os 
import time 

def f(queue): 
    a=0 
    while True: 
     a=a+1 
     child_conn.send(a) 
     time.sleep(0.1) 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=f, args=(child_conn,)) 
    p.start() 
    time.sleep(1) 
    while True: 
     print(parent_conn.recv()) 
     time.sleep(1) 

したがって、メインスレッドはバックグラウンドスレッドの変数を毎秒印刷します。これは1秒に10回更新されます。 私はPipe and Queueを試しましたが、最後に格納された変数を取得しません。この出力は1,2,3,4、...ですが、私は10,20,30、...(または同様のタイミングで)取得したいです。ここでの問題は、名前が示すように、キューとして機能することです。

私がjavaで行うことは、asynctaskのようなものを作成してパブリック変数を更新することですが、マルチプロセスは変数を共有できないということです。

Pythonでこれを行う正しい方法は何ですか?

答えて

2

プロセス間で共有メモリを用いて実装されて使用multiprocessing.Value、:

from multiprocessing import Process, Value 
import time 

def f(n): 
    while True: 
     n.value += 1 
     time.sleep(0.1) 

if __name__ == '__main__': 
    n = Value('i',0) 
    p = Process(target=f, args=(n,)) 
    p.start() 
    while True: 
     time.sleep(1) 
     print(n.value) 

出力:

7 
17 
26 
35 
44 
53 
関連する問題