スレッドを生成するサービスがあります。
スレッドは、ターゲット関数を提供することによって開始されます。
関数が終了すると、スレッドが "死んでいない"ように見えます。私はこのスレッドがParamiko(Fabric経由)といくつかのSSH接続を行い、私がlsof
を実行すると、SSH接続が機能完了後にまだアクティブであることがわかるので、これを知っています。
ターゲット機能の完了時にスレッドが消滅することを確認するにはどうすればよいですか?ここでターゲット関数の完了後にPythonスレッドが確実に消滅するようにするにはどうすればよいですか?
は、私が働いているものの例である:
from time import sleep
from threading import Thread
from fabric.api import run, settings
def thread_func(host):
with settings(host_string=host):
run('ls -lht /tmp')
def spawn_thread(host):
t = Thread(
target=thread_func,
args=(host,)
)
t.start()
spawn_thread('node1.example.com')
while True:
sleep(1)
そして、上記のコードは、その無限ループしている間に、私は別の端末でsudo lsof | grep ssh
を実行する場合、私も私の後に、次のように表示されますスレッドがもはや存在しないことをを知っている:
python 6924 daharon 3u IPv4 170520 0t0 TCP 10.1.1.173:47368->node1.example.com:ssh (ESTABLISHED)
python 6924 daharon 5u IPv4 170524 0t0 TCP 10.1.1.173:47369->node1.example.com:ssh (ESTABLISHED)
python 6924 6930 daharon 3u IPv4 170520 0t0 TCP 10.1.1.173:47368->node1.example.com:ssh (ESTABLISHED)
python 6924 6930 daharon 5u IPv4 170524 0t0 TCP 10.1.1.173:47369->node1.example.com:ssh (ESTABLISHED)
python 6924 6932 daharon 3u IPv4 170520 0t0 TCP 10.1.1.173:47368->node1.example.com:ssh (ESTABLISHED)
python 6924 6932 daharon 5u IPv4 170524 0t0 TCP 10.1.1.173:47369->node1.example.com:ssh (ESTABLISHED)
実際にスレッド関数が完了していますか?with:run()ブロックの前後にprintステートメントを置くと、run()が実際に返ってくることがわかりますか? – Dave