Как определить завершение потока?
Как я могу определить завершение этого потока и по его завершению сделать какое-нибудь действие? Возможно ли это? Исполнить это действие в самой функции func не могу.
from threading import Thread
x = threading.Thread(target=func)
x.start()
Если добавить после строки x.start() строку x.join(), то программа виснет, до завершения потока, как будто все в главном потоке и выполняется.
Ответы (2 шт):
Автор решения: n1tr0xs
→ Ссылка
Можно сделать поток, который будет проверять состояние данного потока:
from threading import Thread
def func():
for i in range(10):
u = [[x,t,y] for x in range(100) for t in range(100) for y in range(100)]
def rev(thread):
thread.join()
print('Поток завершил работу.')
x = Thread(target=func)
x_r = Thread(target=rev, args=(x,))
x.start()
x_r.start()
Автор решения: alex
→ Ссылка
есть еще вариант с глобальной переменной
import threading
import time
_STATE = [False]
def change_state(fun):
def wrapper(*args, **kwargs):
_STATE[0] = True
try:
fun(*args, **kwargs)
except Exception as e:
# show exception
pass
finally:
_STATE[0] = False
@change_state
def thr():
for i in range(10):
_ = [[x,t,y] for x in range(100) for t in range(100) for y in range(100)]
x = Thread(target=thr)
x.start()
while _STATE[0]:
time.sleep(1)