【问题标题】:How to make some parts of code queue-specific in celery?如何在 celery 中制作特定于队列的某些部分代码?
【发布时间】:2014-08-16 08:24:02
【问题描述】:
我有两个包含 celery 任务定义的文件。它们中的每一个都包含特定队列的代码。其中一个导入 scikit-learn,因此对于 VPS 的有限内存来说有点消耗内存。当 celery 初始化时,它会执行两个文件来查找任务,并且每个 celery worker 都会导入 scikit-learn。有没有办法防止这种情况发生?
我已经尝试使用inspect来获取当前的活动队列并在这个worker消耗这个队列时继续,但我认为它在初始化时不起作用:
i = inspect(['celery@hostname'])
print i.active_queues() # None
【问题讨论】:
标签:
python
rabbitmq
celery
amqp
【解决方案1】:
我认为最好的方法是启动两个工人,让他们加载 2 个不同的应用程序并创建 2 个不同的队列。
示例工作者从我的头顶启动 cmd:
celery -A scikit -Q learning worker
celery -A default -Q default worker
这当然需要你添加任务路由(以便 scikit 任务进入学习队列,其他任务进入默认队列)。
【解决方案2】:
我能够通过清空 CELERY_IMPORTS 列表然后通过 cmd 包含来解决它
celery -A proj worker -l info -Q first_queue -I proj.file1
仅在 proj.file1 中查找任务。