2016-07-22 10 views
0

私のPythonスクリプト内では、一定のデータフローを受け取っていますが、非同期メソッドを呼び出すことによって非同期にデータをプッシュしたいとします。バッファに存在するデータは、メソッドが使用可能なときには常にプッシュされます。Python - スレッド化による非同期メソッドの管理

これを実現するには、メソッドを実行するスレッドオブジェクトを作成するtry/catchが常時呼び出されています(メソッドが実行を終了したときに戻ります)。スレッドがtry/catchブレークを実行している場合。

これを書くのが簡単で清潔な方法がありますか?

必要に応じて詳細情報を提供できます。

答えて

0

キューを使用してください。 1つのスレッドは、キューを監視して新しいデータをプッシュするという仕事を持っています。メインスレッドは、新しいデータが利用可能になったときにキューに追加するだけです。

例:メインスレッドをブロックしない

import threading 
import queue 

def pusher(q): 
    while True: 
    item = q.get() 
    if item is None: 
     return   # exit thread 
    ...push data... 

def main(): 
    q = Queue.Queue() 
    # start up the pusher thread 
    t = threading.Thread(target = pusher, args=(q)) 
    t.start() 

    # add items 
    q.put(item1) 
    ... 
    q.put(item2) 
    ... 
    ... 
    # tell pusher to shut down when queue is empty 
    # and wait for pusher to complete 
    q.put(None) 
    t.join() 

q.put(...)こと。

+0

t = threading.Threadとt.start()を複数回呼び出すことはできますか?データが存在しない場合がありますが、スレッドを終了したくない場合があります – BDillan

+0

コードにNone値をキューに入れない限り、プッシャースレッドは終了しません。プログラムが終了する準備ができるまで、キューにNone値を入れないでください。データがないとき、プッシャースレッドは 'get'呼び出しでただブロックします。 – ErikR

関連する問題