这些函数有什么区别

What's the difference between these functions

这些函数有什么区别

  1. create_taskcall_soon
  2. call_soon_threadsaferun_coroutine_threadsafe

create_task 对比 call_soon

这两个函数调度协程的执行,不是线程安全的。
create_task returns 一个 Task 对象,和 call_soon returns Handle 对象,但是除此之外还有什么区别吗,特别是在用法上?

call_soon_threadsafe 对比 run_coroutine_threadsafe

这两个函数是从不同的 OS 线程调用的,而不是事件循环 运行 的线程。在大多数情况下,我可以使用它们中的任何一个。

create_task vs call_soon - these two functions schedule the execution of a Coroutines

不,只有 create_task 调度协程(异步函数)的执行。 call_soon 安排 one-shot 执行普通函数。

因此,如果您有一个用 async def 定义的协程 x,您希望“在后台”执行,您可以调用 asyncio.create_task(x())。如果你有一个用 def 定义的函数 f,你想在事件循环下一次空闲时立即执行,你调用 loop.call_soon(f).

run_coroutine_threadsafecall_soon_threadsafe 的使用差异相同,它们允许从不同的线程向 运行 事件循环提交工作。