5

我的任务需要从 Internet 加载一些大文件,然后进行一些处理。同步运行加载大约需要 3 秒,处理大约需要 0.2 秒。尽管处理比加载快得多,但仍然需要相当长的时间。

我想知道处理我的场景的最佳芹菜配置是什么。多处理、Eventlet 还是其他?

4

1 回答 1

4

在我看来,这个问题需要一个比较多进程/线程与绿色线程的答案;然而,一般来说,在 celery 并发的上下文中,使用两者都没有区别,除非你的资源有限(和太多的任务),或者你建立了太多的出站连接并且你是 i/o-bound,那么你将不得不去“绿色”并使用eventlet。

一个好主意,我在上一届 PyCon 2013 上看到了 Instagram 的展示(Instagram 上的大规模消息传递),他们都使用了。主要用途是线程任务,然而,他们使用“绿色”方法处理那些除了向其他网站发出出站请求之外什么都不做的任务,比如 twitter、facebook 和 tumbler .. 这些类型的任务不值得完整线程/进程,因为没有真正的处理发生,移动,请求/响应周期需要一些时间,所以,对这些任务做的最好的事情就是让它们变成绿色。

您可以创建每个任务使用线程/进程的工作人员,仅通过特定队列处理任务,以及使用仅通过其他队列处理其他任务的 greenlet 的另一个工作人员。然后你可以根据上面的解释决定哪个去哪里!

于 2013-09-28T13:27:27.393 回答