1

pyaudio のブロッキング呼び出しをスレッドでラップして、キューを介した非ブロッキング アクセスを提供しようとしています。ただし、私が抱えている問題はpyaudioやキューではなく、スレッドをテストしようとする問題です。「可能な限り最小限に例を取り除く」に合わせて、すべての pyaudio の要素が消え、スレッド クラスとメインでのそのインスタンス化だけが残りました。

私が望んでいたのは、コンソールまたは tk で制御している間に、作成したオブジェクトをバックグラウンドで処理できるオブジェクトでした。次の最大ストリップダウンの例では、メインが実行され、機能しているかどうかを尋ねられている間、スレッドが処理を行う必要があると思います。raw_input プロンプトは表示されません。スレッド セーフではない IDLE から実行していたとしても、これには驚かないでしょうが、OS から直接スクリプトを実行すると、同じ動作が得られます。「実行中」の印刷によって押された画面で生の入力プロンプトが消えるのを見る準備ができていましたが、それさえ起こりません。プロンプトは表示されません。どうしたの?ctrl-C とウィンドウのクローズに応答しますが、それでもメインの実行を確認できるようにしたいと考えています。

import threading
import time

class TestThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.running=True
        self.run()

    def run(self):        
        while self.running:
            time.sleep(0.5)
            print 'running'                            

    def stop(self):
        self.running=False

if __name__=='__main__':

    tt=TestThread()
    a=raw_input('simple stuff working ? -- ')
    tt.stop()
4

2 に答える 2

2

self.run() の代わりに self.start() でスレッドを開始する必要があります。この場合、他の通常の関数と同じようにスレッド関数を実行しているだけです。

于 2012-11-04T22:10:02.133 に答える
-1

通常、スレッドから継承しません。代わりに、使用しますThread(target=func2run).start()

于 2012-11-04T22:13:57.823 に答える