#python #multithreading
#python #многопоточность
Вопрос:
Я вызываю стороннюю функцию, которую я не написал, поэтому я не могу ее редактировать. У этого есть своя собственная логика, которая может занять некоторое время для завершения.
Я завернул этот сторонний вызов в поток и хотел немедленно отменить его, как только получил какое-то событие.
import threading
import time
# Assume this is the 3rd party function
def call_3rd_party_function():
for i in range(50):
print("Executing task " str(i))
time.sleep(0.25)
def task(stop_event: threading.Event):
print("Starting background thread!")
while not stop_event.is_set():
call_3rd_party_function()
stop_event = threading.Event()
t = threading.Thread(target=task, args=(stop_event,))
t.setDaemon(True)
t.start()
time.sleep(5)
stop_event.set()
t.join()
print("Main thread end!")
В приведенном выше коде, например, через 5 секунд.. Я хочу отменить эту задачу, но мой вывод — это не то, что я хочу, поскольку функция третьей стороны все еще продолжает выполнять свои задачи до завершения.
Starting background thread!
Executing task 0
Executing task 1
Executing task 2
Executing task 3
.
.
Executing task 49
Main thread end!
Есть ли способ сделать это? Я завернул его в поток, так как хочу, чтобы он запускался сам по себе, чтобы не блокировать основной поток от выполнения некоторых других действий.
Какие-либо подсказки?
Комментарии:
1. Запустите его как a
Process
, а не как aThread
, а затем вызовитеterminate()
экземпляр.2. Из любопытства, так это то, что не может быть решено никакими инструментами многопоточности Python? Спасибо за ваше предложение.
3. Я не знаю способа завершения потока без его сотрудничества.