Stack Overflow на русском Asked by Clark Devlin on August 21, 2020
Как я могу определить завершение этого потока и по его завершению сделать какое-нибудь действие? Возможно ли это? Исполнить это действие в самой функции func
не могу.
from threading import Thread
x = threading.Thread(target=func)
x.start()
Если добавить после строки x.start()
строку x.join()
, то программа виснет, до завершения потока, как будто все в главном потоке и выполняется.
есть еще вариант с глобальной переменной
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)
Answered by alex on August 21, 2020
Можно сделать поток, который будет проверять состояние данного потока:
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()
Answered by n1tr0xs on August 21, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP