【发布时间】:2018-06-21 08:47:38
【问题描述】:
从事件线程外部将协程推送到事件线程的pythonic方法是什么?
【问题讨论】:
标签: python python-3.x python-asyncio
从事件线程外部将协程推送到事件线程的pythonic方法是什么?
【问题讨论】:
标签: python python-3.x python-asyncio
实际信息:
从 Python 3.7 高级函数 asyncio.create_task(coro) was added 开始,可以同时使用 asyncio.ensure_future 和 loop.create_task 来创建任务。
Python 文档 refers 到 asyncio.create_task(coro) 关于“创建新任务的首选方式”。
原答案:
要明确一点:通常 asyncio 在单线程中运行。并发不是由线程提供的,而是通过使用单个事件循环来运行不同的协程。
如果你想提交并发运行的协程而不等待它的结果,你应该使用asyncio.ensure_future创建task(difference来自create_task)。
但是,如果您的应用程序使用多个线程,并且您希望将从一个线程运行的协程提交到在另一个线程中运行的事件循环,您应该使用run_coroutine_threadsafe。这是很好的example 在另一个线程中运行事件循环并从主线程提交协程。
【讨论】:
asyncio.create_task(coro) 是可能的。
asyncio.create_task(coro) 应该使用”的源代码