0

クラスに次のコードがあります。

def persistDBThread(self):
    while True:
        Thread(target=self.__persistDB)
        time.sleep(10)

def  __persistDB(self):
    with open(self.authDBPath, 'w') as outfile:
        json.dump(self.authDB, outfile)

スレッドは __ main__ で開始されますが、このスレッドを開始するとすぐに、メインの実行で実際にブロックされます。

どうしてこれなの?私はGILについて知っています - それはすべて同じプロセスにあります。マイクロスレッドでは同じプロセスでタスクの切り替えが行われているのに、なぜ元に戻らないのでしょうか?

ありがとう!

質問してすみません:

def persistDBThread(self):
    Thread(target=self.__persistDB).start()


def  __persistDB(self):
    while True:
        time.sleep(10)
        outfile = open(self.authDBPath, 'w')
        json.dump(self.authDB, outfile)
4

1 に答える 1

3

電話するのが__persistDB早すぎます。target=self.__persistDB最後に括弧なしで使用します。括弧を含めると、スレッド呼び出しが行われる前に関数が呼び出されます。かっこを使用しない場合は、後で呼び出される引数として関数を渡します。

Thread次に、結果のオブジェクトのstartメソッドを呼び出す必要があります。これはすべてドキュメントに記載されているので、読む必要があります。

while Trueまた、ループで実行しないでください。何度も呼び出すと、無限の数のスレッドが作成されますThread。Google または StackOverflow で「Python スレッド化の例」を検索して、threadingモジュールを使用する正しい方法の多くの例を見つけます (例: here ) 。

于 2013-09-03T17:35:27.573 に答える