python中异步任务和同步线程之间的通信

您所在的位置:网站首页 python多线程之间怎么通信 python中异步任务和同步线程之间的通信

python中异步任务和同步线程之间的通信

2022-06-08 13:39| 来源: 网络整理| 查看: 265

我建议使用另一种方式:使用asyncio.Queue类在两个世界之间通信。这样做的好处是,不必将线程池中的一个插槽花在需要很长时间才能完成的操作上,例如get()。

下面是一个示例:

class Queue: def __init__(self): self._loop = asyncio.get_running_loop() self._queue = asyncio.Queue() def sync_put_nowait(self, item): self._loop.call_soon(self._queue.put_nowait, item) def sync_put(self, item): asyncio.run_coroutine_threadsafe(self._queue.put(item), self._loop).result() def sync_get(self): return asyncio.run_coroutine_threadsafe(self._queue.get(item), self._loop).result() def async_put_nowait(self, item): self._queue.put_nowait(item) async def async_put(self, item): await self._queue.put(item) async def async_get(self): return await self._queue.get()

以sync_为前缀的方法意味着由同步代码(在事件循环线程外部运行)调用。以async_为前缀的函数将由在事件循环线程中运行的代码调用,而不管它们是否实际上是协程。(例如,put_nowait不是协程,但它仍然必须区分同步版本和异步版本。)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3