loop.create_task 和 asyncio.run_coroutine_threadsafe 之间的 Python asyncio 区别

Jam*_*mes 4 python python-3.x python-asyncio

从事件线程外部将协程推送到事件线程的pythonic方法是什么?

Mik*_*mov 7

实际信息:

从 Python 3.7 开始asyncio.create_task(coro) 添加了高级函数,可以用来代替两者asyncio.ensure_futureloop.create_task来创建任务。

Python文档是指asyncio.create_task(coro)作为“创建新任务首选方式。”

原答案:

需要明确的是:通常 asyncio 在单线程中运行。并发不是由线程提供,而是通过使用单个事件循环来运行不同的协程。

如果你想提交协同程序正在运行的同时而不必等待它的结果,你应该创建任务使用asyncio.ensure_futurecreate_task)。

但是,如果您的应用程序使用多个线程并且您希望将从一个线程运行的协程提交到在另一个线程中运行的事件循环,您应该使用run_coroutine_threadsafe. 这是在另一个线程中运行事件循环并从主线程向 in 提交协程的很好示例