是 Python 的异步 'loop.create_task(...)' 线程安全?



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

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

然而,由于这些类是在主线程中初始化的,我从那里调用loop.create_task(...)函数而不是循环的线程。这会引起什么问题吗?

答案是不,使用loop.create_task(...)从不同的线程调度协程是不线程安全的,使用asyncio.run_coroutine_threadsafe(…)代替。