Поток Python отменяет стороннюю запущенную функцию

#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 , а не как a Thread , а затем вызовите terminate() экземпляр.

2. Из любопытства, так это то, что не может быть решено никакими инструментами многопоточности Python? Спасибо за ваше предложение.

3. Я не знаю способа завершения потока без его сотрудничества.