0

这是我的 settings.py 的摘录

CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
import djcelery
from celery.schedules import crontab
djcelery.setup_loader()
CELERY_IMPORTS = ("app.some.tasks",)

CELERYBEAT_SCHEDULE = {
    "send_mail": {
        "task": "app.some.tasks.send_mail",
        "schedule": timedelta(seconds=30),
    },
}

任务运行时send_mail,其他任务无法运行(被忽略,从 celeryd 日志中可以看出未交付)

[2015-08-01 23:39:36,155: INFO/MainProcess] start send_mails task.
[2015-08-01 23:39:36,185: INFO/MainProcess] finish send_mails task.
[2015-08-01 23:40:04,643: INFO/MainProcess] start send_mails task.
[2015-08-01 23:40:04,666: INFO/MainProcess] finish send_mails task.
[2015-08-01 23:40:06,163: INFO/MainProcess] start send_mails task.
[2015-08-01 23:40:06,205: INFO/MainProcess] finish send_mails task.
[2015-08-01 23:40:34,657: INFO/MainProcess] start send_mails task.
[2015-08-01 23:40:34,684: INFO/MainProcess] finish send_mails task.

但是如果我在这 30 秒的时间间隔内执行另一个任务,那么它实际上会运行。

send_mail任务

@task
def send_mail():
    log.info( u'start send_mails task.' )
    from django.core import management
    management.call_command('send_mail')
    log.info( u'finish send_mails task.' )

send_mail是来自mailer包的命令。

Celeryd 执行如下

celeryd --settings=settings --beat --concurrency=8
4

0 回答 0