Xya*_*and 5 python concurrency celery
我有一些任务需要从 Internet 加载一些大文件,然后进行一些处理。同步运行加载将需要 ~3s 和处理 ~0.2s。尽管处理速度比加载快得多,但仍然需要相当长的时间。
我想知道处理我的场景的最佳 celery 配置是什么。多处理,Eventlet,或者其他什么?
在我看来,这个问题需要一个比较多进程/线程与绿色线程的答案;然而,一般来说,在 celery 并发的上下文中,使用 in 都没有什么区别,除非你的资源有限(并且任务太多),或者你建立了太多的出站连接并且你是 i/o 绑定的,那么你就必须“绿色”并使用 eventlet。
好主意,我在上次 PyCon 2013 上看到了 Instagram 的展示(Instagram 的大规模消息传递),他们同时使用了这两种方法。主要用途是线程任务,然而,他们使用“绿色”方法来处理那些除了向其他网站(如 twitter、facebook 和 tumbler)发出出站请求之外什么也不做的任务。这些类型的任务不值得完整的处理。线程/进程,由于没有发生真正的处理,移动,请求/响应周期需要一些时间,因此,处理这些任务的最佳方法是将它们设为绿色。
您可以创建每个任务使用线程/进程的工作程序,仅通过特定队列处理任务,以及使用 greenlet 的另一个工作程序,仅通过其他队列处理其他任务。然后你就可以根据上面的解释决定哪个去哪里!