4

私はPythonが初めてです。これは私のコードです:

import logging
logging.basicConfig(level = logging.DEBUG, format = "[%(levelname)s] (%(threadName)-10s) %(message)s")
import threading
import time

def thread1():
    for i in range(0, 10, 2):
        logging.debug(i)
        time.sleep(1)


def thread2():
    for i in range(10, 20):
        logging.debug(i)
        time.sleep(1)

t1 = threading.Thread(name = "thread1", target = thread1)
t1.setDaemon(True)
t1.start()

t2 = threading.Thread(name = "thread2", target = thread2)
t2.setDaemon(True)
t2.start()

コードをコピーして Python コマンド ライン プロンプトに貼り付けたところ、次の結果が得られました。

ここに画像の説明を入力

ご覧のとおり、2 つのスレッドは既に完了していますが、プログラムは終了していないようです (コマンド プロンプトが返されませんでした)。スレッドをプロパティ終了しなかった私のコードに関連していると思います。本当?この問題を修正するにはどうすればよいですか? ありがとう。

4

2 に答える 2

4

実際には、コマンド プロンプトが行に戻り、>>> [DEBUG] (thread1 ) 2さらに入力する準備ができていました。デーモン スレッドはバックグラウンドで実行され、想定されていたものを出力し、最終的に完了しました。ctrl-c を入力する必要はまったくありませんでした。別の python コマンドを入力することもできます。

于 2013-10-14T16:52:14.410 に答える
0

私の記憶が正しければ、スレッドを停止するには threading.Event を使用する必要があります。例えば:

self.stoprequest = threading.Event()

""" When self.stoprequest.set() is called,
it sets an event on the thread - stopping it.""" 
self.stoprequest.set()

したがって、開始する各スレッドで threading.Event() を作成すると、instance.set() を使用して外部から停止できます。

子スレッドが生成されたメインスレッドを強制終了することもできます:)

于 2013-10-14T16:52:54.600 に答える