有没有办法从多处理队列中进行异步获取而不阻塞?

时间:2019-07-09 01:43:19

标签: python asynchronous

我有一个需要多处理才能处理CPU绑定反序列化和解码的设备,但是其余的应用程序是非常慢的IO和网络连接,对于异步而言已经成熟了;但似乎没有很好的方法将这两者结合在一起。有没有办法从多处理队列中进行异步获取而不会阻塞?

我尝试了https://github.com/dano/aioprocessing,但是在取消协程时它挂起了。

import multiprocessing
import asyncio
import atexit
from concurrent.futures import ProcessPoolExecutor


@atexit.register
def kill_children():
    [p.kill() for p in multiprocessing.active_children()]


async def queue_get(queue: multiprocessing.Queue):
    executor = ProcessPoolExecutor(max_workers=1)
    loop = asyncio.get_running_loop()
    return await loop.run_in_executor(executor, queue.get)


async def main():
    queue = multiprocessing.Queue()
    get_task = asyncio.create_task(queue_get(queue))

    queue.put(None)

    print(await get_task)


if __name__ == "__main__":
    asyncio.run(main())

这不起作用,因为队列在创建之前没有传递给进程。

0 个答案:

没有答案