我的任务需要从互联网上加载大文件,然后进行一些处理。同步运行加载需要约3秒,处理时间约为0.2秒。虽然处理速度比加载快得多,但仍需要相当长的时间。
我想知道什么是最好的芹菜配置来处理我的场景。多处理,Eventlet或其他什么东西?
答案 0 :(得分:2)
在我看来,这个问题需要一个比较多进程/线程与绿色线程的答案;但是,一般来说,在芹菜并发的情况下,使用其中任何一个并没有什么不同,除非你的资源有限(而且任务太多),或者你的出站连接太多而且你是i / o-bound,那么你将不得不去“绿色”并使用eventlet。
一个好主意,我在上一次PyCon 2013(Messaging at Scale at Instagram)中看过Instagram,他们同时使用了两者。主要用途是线程化任务,然而,他们使用“绿色”方法执行那些除了向其他网站(例如twitter,facebook和tumbler)进行出站请求之外什么都不做的任务。这些类型的任务不值得完成线程/进程,因为没有真正的处理发生,移动,请求/响应周期需要一些时间,所以,最好的办法就是让它们变绿。
您可以创建每个任务使用线程/进程的工作程序,仅通过特定队列处理任务,以及使用仅通过其他队列处理其他任务的greenlet的另一个工作程序。然后你可以根据上面的解释决定哪个去哪了!