2024-04-28 07:44:58 发布
网友
我一直在阅读Python3中的asyncio模块,以及更广泛的python中的协程,我无法理解是什么使asyncio成为如此出色的工具。 我有一种感觉,所有你可以做的协同工作,你可以做得更好,通过使用任务队列的多处理模块(例如芹菜)。 有没有协作比任务队列更好的用例?
不是一个正确的答案,而是一个不适合评论的提示列表:
您提到的是multiprocessing模块(我们也考虑一下threading)。假设您必须处理数百个套接字:是否可以生成数百个进程或线程?
multiprocessing
threading
同样,对于线程和进程:如何处理对共享资源的并发访问?像锁定这样的机制的开销是多少?
像芹菜这样的框架也增加了一个重要的开销。你能用它来处理高流量web服务器上的每个请求吗?顺便问一下,在这种情况下,谁负责处理插座和连接(芹菜的性质不能为您这样做)?
请务必阅读the rationale behind asyncio。这个基本原理(除其他外)提到了一个系统调用:writev()——这不是比多个write()更有效吗?
writev()
write()
在上述答案的基础上加上:
如果手头的任务是I/O绑定的,并且在共享数据上操作,那么协同路由和异步可能是解决方法。
另一方面,如果你有CPU限制的任务,数据不共享,像芹菜这样的多处理系统应该更好。
如果手头的任务是CPU和I/O绑定,并且不需要共享数据,我仍然会使用芹菜。您可以在芹菜中使用异步I/O!
如果您有一个CPU受限的任务,但是需要共享数据,那么我现在看到的唯一可行的选择是将共享数据保存在数据库中。最近有过类似pyparallel的尝试,但仍在进行中。
pyparallel
不是一个正确的答案,而是一个不适合评论的提示列表:
您提到的是
multiprocessing
模块(我们也考虑一下threading
)。假设您必须处理数百个套接字:是否可以生成数百个进程或线程?同样,对于线程和进程:如何处理对共享资源的并发访问?像锁定这样的机制的开销是多少?
像芹菜这样的框架也增加了一个重要的开销。你能用它来处理高流量web服务器上的每个请求吗?顺便问一下,在这种情况下,谁负责处理插座和连接(芹菜的性质不能为您这样做)?
请务必阅读the rationale behind asyncio。这个基本原理(除其他外)提到了一个系统调用:
writev()
——这不是比多个write()
更有效吗?在上述答案的基础上加上:
如果手头的任务是I/O绑定的,并且在共享数据上操作,那么协同路由和异步可能是解决方法。
另一方面,如果你有CPU限制的任务,数据不共享,像芹菜这样的多处理系统应该更好。
如果手头的任务是CPU和I/O绑定,并且不需要共享数据,我仍然会使用芹菜。您可以在芹菜中使用异步I/O!
如果您有一个CPU受限的任务,但是需要共享数据,那么我现在看到的唯一可行的选择是将共享数据保存在数据库中。最近有过类似
pyparallel
的尝试,但仍在进行中。相关问题 更多 >
编程相关推荐