У меня есть служба, которая порождает темы.
Потоки запускаются с помощью целевой функции.
Похоже, что поток не «умирает», когда функция заканчивается.Я знаю это, потому что поток устанавливает некоторые соединения SSH с Paramiko (через Fabric ), и если я делаю lsof
, я вижу, что соединения SSH все еще активны после завершения функции.
Как я могу убедиться, что поток умирает, когда его целевая функция завершает работу?
Вот пример того, с чем я работаю:
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)