python - io/cpu 绑定(bind)任务的 Celery 并发配置

标签 python concurrency celery

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

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

最佳答案

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

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

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

关于python - io/cpu 绑定(bind)任务的 Celery 并发配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18119960/

相关文章:

mysql - MySQL 上的 join insert/update 是原子操作吗?

Python 从字符串创建模块并运行该模块

python - Python:从stdin读取和写入Powershell中的二进制文件

python bool 值到带引号的 json 字符串

java - 在 Java 中使子类中的变量可变

go - 如何在 goroutine 闭包中更改外部变量的值

python - 将 Django 请求对象传递给 celery 任务

concurrency - 将 celery 并发设置为每个队列 1 个 worker

python - 无法从 celery 信号连接到 celery 任务?

python - 在Python中使用元组绘制有向图