当前位置:  开发笔记 > 编程语言 > 正文

asyncio和coroutines vs任务队列

如何解决《asyncio和coroutinesvs任务队列》经验,为你挑选了2个好方法。

我一直在阅读python 3中的asyncio模块,更广泛地讲述python中的协同程序,我无法得到使asyncio成为如此优秀工具的原因.我觉得你可以用协同程序做所有事情,你可以通过使用基于多处理模块的任务队列(例如芹菜)来做得更好.是否存在协同程序优于任务队列的用例?



1> Andrea Corbe..:

不是一个正确的答案,而是一个不适合评论的提示列表:

你提到了这个multiprocessing模块(让我们也考虑一下threading).假设你必须处理数百个套接字:你能产生数百个进程或线程吗?

同样,使用线程和进程:如何处理对共享资源的并发访问?锁定等机制的开销是多少?

像Celery这样的框架也增加了重要的开销.您是否可以使用它来处理高流量Web服务器上的每个请求?顺便说一句,在那种情况下,谁负责处理套接字和连接(Celery的性质不能为你做到这一点)?

一定要阅读asyncio背后的基本原理.这个理由(以及其他内容)提到了一个系统调用:writev()- 不是比多个write()s 更有效吗?



2> bhaskarc..:

添加到上面的答案:

如果手头的任务是I / O绑定的并且对共享数据进行操作,则协程和asyncio可能是可行的方法。

另一方面,如果您有不共享数据的CPU密集型任务,那么像Celery这样的多处理系统应该更好。

如果当前的任务是同时绑定CPU和I / O且不需要共享数据,那么我仍将使用Celery。您可以在Celery中使用异步I / O!

如果您有CPU任务,但需要共享数据,那么我现在看到的唯一可行的选择是将共享数据保存在数据库中。最近有类似的尝试,pyparallel但仍在进行中。

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有