#python-3.x #multithreading
#python-3.x #многопоточность
Вопрос:
как вы уничтожаете бесконечную функцию в Python? Я бы хотел, чтобы функция выполнялась в течение 5 секунд, а затем была остановлена, но thread.terminate(), похоже, не работает, я получаю следующую ошибку
AttributeError: 'Thread' object has no attribute 'terminate'
вот код
import threading, time
def endless():
while True:
pass
p = threading.Thread(target=endless, name="endless")
p.start()
time.sleep(5)
if p.is_alive():
p.terminate()
p.join()
Комментарии:
1. Объект thread не имеет
terminate
метода. Используйтеprocess
для этого. Для потоков вам нужно установить флаг, чтобы поток завершался сам по себе.2. как бы я использовал process?
AttributeError: module 'threading' has no attribute 'process'
Ответ №1:
Как упоминалось в комментарии, используйте Process
, если вы хотите принудительно завершить функцию обратного вызова.
from multiprocessing import Process, freeze_support
import time
def endless():
while True:
pass
if __name__ == '__main__': # required for windows
freeze_support()
p = Process(target=endless)
p.start()
time.sleep(5)
if p.is_alive():
p.terminate()
p.join()