【问题标题】:Is Python's asyncio `loop.create_task(...)` threadsafe?Python 的 asyncio `loop.create_task(...)` 是线程安全的吗?
【发布时间】:2021-10-07 11:40:28
【问题描述】:

我在主线程上运行 matplotlib,并带有来自外部源的实时数据图。为了处理传入的数据,我有一个简单的 UDP 监听器,使用 asyncio 监听包,事件循环在单独的线程上运行。

我现在想添加更多源,并且我想在与第一个相同的循环/线程上运行它们的侦听器。为此,我只是将循环对象传递给实现侦听器的类,它们的构造函数向循环中添加一个任务,该任务将初始化并运行侦听器。

但是,由于这些类是在主线程中初始化的,所以我从那里调用 loop.create_task(...) 函数,而不是循环的线程。这会导致任何问题吗?

【问题讨论】:

  • 答案是否定的。我会详细说明。

标签: python multithreading python-asyncio


【解决方案1】:

答案是否定的,使用loop.create_task(...) 调度来自不同线程的协程不是线程安全的,请改用asyncio.run_coroutine_threadsafe(...)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多