0

我通过 django-celery(以 rabbitmq 作为后端)运行一些任务,这些任务非常耗时且 CPU 密集型。

我有 2 个 worker Ec2 实例(一个很小,另一个是高 cpu 中等)。

我已经将小实例设置为运行 1 个并发任务,将中型实例设置为 4 个。这对我来说效果很好。但是偶尔,在 celery 监视器中,我看到小实例正在处理一项任务,并且还有 2 或 3 个任务处于“接收”状态(分配给小实例),而中型实例没有做任何事情。理想情况下,id 喜欢 medium 实例优先于 small,但在这种情况下,如果 small 处于并发状态,则任务应该转到 medium。似乎这个小实例咬得比它可以咀嚼的多......就像在给它自己分配任务时一样,它目前无法启动。

有没有办法让工人只接受当时可以开始的任务?

截图:http ://dl.dropbox.com/u/361747/task-state.png 。以domU开头的worker是small,以ip开头的worker是medium。

4

1 回答 1

1

您可以使用 CELERYD_PREFETCH_MULTIPLIER 选项来控制要预取的任务数。在您的情况下, CELERYD_PREFETCH_MULTIPLIER=1 将有助于平均分配任务。

http://ask.github.com/celery/configuration.html#celeryd-prefetch-multiplier

于 2012-01-17T09:57:16.303 回答