这是我的芹菜文件:
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ets.settings')
from django.conf import settings # noqa
app = Celery('proj',
broker='redis://myredishost:6379/0',
backend='redis://myredishost:6379/0',
include=['tracking.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
)
if __name__ == '__main__':
app.start()
这是我的任务文件:
@app.task
def escalate_to_sup(id, group):
escalation_email, created = EscalationEmail.objects.get_or_create()
escalation_email.send()
return 'sup email sent to: '+str(group)
@app.task
def escalate_to_fm(id, group):
escalation_email, created = EscalationEmail.objects.get_or_create()
escalation_email.send()
return 'fm email sent to: '+str(group)
我这样开始工作:
celery -A ets worker -l info
我也试图像这样添加并发:
celery -A ets worker -l info --concurrency=10
我尝试使用以下内容调用上述任务:
from tracking.tasks import escalate_to_fm, escalate_to_sup
def status_change(equipment):
r1 = escalate_to_sup.apply_async((equipment.id, [1,2]), countdown=10)
r2 = escalate_to_fm.apply_async((equipment.id, [3,4]), countdown=20)
print r1.id
print r2.id
打印:
c2098768-61fb-41a7-80a2-f79a73570966 23959fa3-7f80-4e20-a42f-eef75e9bedeb
escalate_to_sup和escalate_fm函数间歇性地登录到worker。至少有1个执行,但从不同时执行。
我尝试过更多的工作人员,然后执行这两项任务。我这样做:
celery -A ets worker -l info --concurrency=10 -n worker1.%h
celery -A ets worker -l info --concurrency=10 -n worker2.%h
问题是我不知道有多少任务可能同时执行,因此为每个可能执行的任务启动一个worker是不可行的。
芹菜是否期望为每项活动任务开展工作?
如何使用单个工作人员执行多项任务?