在Python3中使用asyncio.Queue进行并行生产者-消费者流

时间:2019-03-08 04:34:14

标签: python parallel-processing python-asyncio publish-subscribe

我想对一个大文件的行进行一些计算,我发现读取行所花费的时间少于5%,计算每行所花费的时间为95%。

然后我发现 df <- data.frame(a = 1:10, b = 11:20) 似乎很适合我的需求。 但是,它需要使用asyncio.Queueconcurrent.futures.ThreadPoolExecutor来实现并行。没有它们,ProcessPoolExecutor是单线程的。

我找不到一个示例来知道如何编写它。 大多数示例仅在消费者中打印,而不会返回任何值。

请给我写个例子吗?

为进行演示,生产者将10个数字的多行放入队列中,这5个使用方拆分了该行并计算单行的总和和平均值,并且main()将总和和平均值相加以在其中打印两个结果结束。


默认示例为单线程。只需将asyncio更改为await asyncio.sleep(sleep_for)

然后,仅显示“ worker-0”。 CPU%始终小于100%。

for i in range(10000000):pass

此外,我希望代码向后兼容Python 3.5.3,因为PyPy看起来更快。

0 个答案:

没有答案