为什么 GUI 在与 asyncio 循环对话时应该使用

在单独的线程中处理 GUI + asyncio 时,建议在 asyncio 循环需要与 GUI 通信时使用队列。但是,当 GUI 希望与异步事件循环通信时,应该使用call_soon_threadsafe().

例如,一个答案指出:

当事件循环需要通知 GUI 刷新某些内容时,它可以使用队列,如下所示。另一方面,如果 GUI 需要告诉事件循环做某事,它可以调用 call_soon_threadsafe 或 run_coroutine_threadsafe。

我不明白的是为什么 GUI 不能使用另一个队列而不是call_soon_threadsafe()?即GUI不能将数据放入队列中以供异步循环获取和处理吗?这只是一个设计决策还是有一些技术原因不使用从 GUI 到异步循环的队列?


繁花不似锦
浏览 61回答 1
1回答

LEATH

没有合适的队列类可供使用。asyncio.Queue从事件循环外部进行交互是不安全的,并且queue.Queue会阻塞事件循环。如果您无论如何都想使用队列,则可以调用asyncio.run_coroutine_threadsafeanasyncio.Queue方法put。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python