TransWikia.com

Как определить завершение потока?

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(), то программа виснет, до завершения потока, как будто все в главном потоке и выполняется.

2 Answers

есть еще вариант с глобальной переменной

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP