4

外部で設定された条件をチェックして終了できる必要がある (一連の) 無限ループを実行する必要があります。スレッド化モジュールがそれを可能にするだろうと思っていましたが、私の努力は失敗に終わりました。これが私がやろうとしていることの例です:

import threading

class Looping(object):

    def __init__(self):
     self.isRunning = True

    def runForever(self):
       while self.isRunning == True:
          "do stuff here"

l = Looping()
t = threading.Thread(target = l.runForever())
t.start()
l.isRunning = False

t.start が別のスレッドで実行され、l の属性に引き続きアクセスできることを期待していました。これは起こりません。上記のスニペットを Python シェル (IPython) で試しました。インスタンス化の直後に t start の実行が開始され、それ以降の入力がブロックされます。明らかに、threading モジュールについて正しくないことがあります。問題を解決する方法について何か提案はありますか?

4

1 に答える 1

11

電話するのがrunForever早すぎます。target = l.runForever括弧なしで使用します。

関数呼び出しは、その引数が評価されるまで評価されません。を記述runforever()すると、スレッドを作成する前に、その時点で関数が呼び出されます。を渡すだけrunForeverで関数オブジェクト自体が渡され、スレッド化装置は準備ができたときに呼び出すことができます。ポイントは、実際には呼び出したくないということですrunForever。後で呼び出す必要runForeverあるスレッド コードを伝えたいだけです。

于 2013-04-06T06:17:42.463 に答える