【问题标题】:Python asyncio difference between loop.create_task and asyncio.run_coroutine_threadsafeloop.create_task 和 asyncio.run_coroutine_threadsafe 之间的 Python asyncio 区别
【发布时间】:2018-06-21 08:47:38
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x python-asyncio


    【解决方案1】:

    实际信息:

    从 Python 3.7 高级函数 asyncio.create_task(coro) was added 开始,可以同时使用 asyncio.ensure_futureloop.create_task 来创建任务。

    Python 文档 refersasyncio.create_task(coro) 关于“创建新任务的首选方式”。

    原答案:

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

    如果你想提交并发运行的协程而不等待它的结果,你应该使用asyncio.ensure_future创建taskdifference来自create_task)。

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

    【讨论】:

    • 嗨@Mikhail,也许最好更新你的答案,因为现在asyncio.create_task(coro) 是可能的。
    • @LeonardoRick 感谢您的关注!更新了!
    • @MikhailGerasimov 请添加“来自 Python 3.7 asyncio.create_task(coro) 应该使用”的源代码
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 2018-09-04
    • 2016-03-02
    • 2020-04-14
    • 2021-06-10
    • 2021-01-02
    • 2016-03-26
    • 2011-03-24
    相关资源
    最近更新 更多