为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2023-07-27 16:23:18
在单独的线程中处理 GUI + asyncio 时,建议在 asyncio 循环需要与 GUI 通信时使用队列。但是,当 GUI 希望与异步事件循环通信时,应该使用call_soon_threadsafe().例如,一个答案指出:当事件循环需要通知 GUI 刷新某些内容时,它可以使用队列,如下所示。另一方面,如果 GUI 需要告诉事件循环做某事,它可以调用 call_soon_threadsafe 或 run_coroutine_threadsafe。我不明白的是为什么 GUI 不能使用另一个队列而不是call_soon_threadsafe()?即GUI不能将数据放入队列中以供异步循环获取和处理吗?这只是一个设计决策还是有一些技术原因不使用从 GUI 到异步循环的队列?
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

没有合适的队列类可供使用。asyncio.Queue从事件循环外部进行交互是不安全的,并且queue.Queue会阻塞事件循环。

如果您无论如何都想使用队列,则可以调用asyncio.run_coroutine_threadsafeanasyncio.Queue方法put


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信