Безопасно ли создавать цикл событий asyncio в одном потоке и запускать его в другом потоке, имея возможность отменить егPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Безопасно ли создавать цикл событий asyncio в одном потоке и запускать его в другом потоке, имея возможность отменить ег

Сообщение Anonymous »

Я хочу знать, безопасно ли создавать цикл событий asyncio в одном потоке и запускать цикл в другом, имея при этом возможность отменить его из-за пределов потока, в котором выполняется цикл событий. я хочу запустить асинхронную функцию в потоке, имея при этом возможность отменить ее извне потока
вот код, который я сейчас использую, я хочу знать, правильный ли это подход или есть ли более простой/лучший способ сделать это

Код: Выделить всё

import asyncio
from concurrent.futures import ThreadPoolExecutor, CancelledError
import time

pool = ThreadPoolExecutor()
loop = asyncio.new_event_loop()

def start_event_loop(loop):
asyncio.set_event_loop(loop)  # is this necessary?
loop.run_forever()

pool.submit(start_event_loop, loop)

async def long_task():
try:
while True:
print("Running...")
await asyncio.sleep(1)
except asyncio.CancelledError:
print("Task was cancelled")

future = asyncio.run_coroutine_threadsafe(long_task(), loop)

time.sleep(5)
loop.call_soon_threadsafe(future.cancel)

try:
future.result()
except CancelledError:
time.sleep(1)
print("Future was cancelled")

loop.call_soon_threadsafe(loop.stop)  # can i reuse the loop?

while loop.is_running():
print("Wating for loop to stop...")
time.sleep(0.1)

loop.close() # is this necessary?
print("Loop stopped")
это основано на этой статье и этом вопросе
также есть несколько дополнительных вопросов, которые я хочу задать:

[*]Нужно ли использовать asyncio.set_event_loop? оба они выдают одинаковый результат

[*]Можно ли повторно использовать цикл событий после его остановки или мне следует создавать новый цикл каждый раз после остановки цикл.

Нужно ли закрывать цикл после того, как вы с ним закончили.



Подробнее здесь: https://stackoverflow.com/questions/792 ... other-thre
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»