остановить бесконечную функцию с помощью потоков

#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()