我的Python之旅coding

使用celery遇到的坑

2017-05-07  本文已影响364人  resolvewang

最近在写一个分布式微博爬虫,主要就是使用celery做的分布式任务调度。celery确实比较好用,但是也遇到一些问题,我遇到的问题主要集中在定时任务任务路由这两个部分。本文不会讲解celery的基本使用,如果需要看celery入门教程的话,请点击这里跳转。

app.conf.update(
    CELERY_TIMEZONE='Asia/Shanghai',
    CELERY_ENABLE_UTC=True,
    CELERY_ACCEPT_CONTENT=['json'],
    CELERY_TASK_SERIALIZER='json',
    CELERY_RESULT_SERIALIZER='json',
    CELERYBEAT_SCHEDULE={
        'user_task': {
            'task': 'tasks.user.excute_user_task',
            'schedule': timedelta(minutes=3),
        },
        'login_task': {
            'task': 'tasks.login.excute_login_task',
            'schedule': timedelta(hours=10),
        },
    },
    CELERY_QUEUES=(
        Queue('login_queue', exchange=Exchange('login', type='direct'), routing_key='for_login'),
        Queue('user_crawler', exchange=Exchange('user_info', type='direct'), routing_key='for_user_info'),
        Queue('fans_followers', exchange=Exchange('fans_followers', type='direct'), routing_key='for_fans_followers')
    )
)

结果过了一天发现定时任务并没有执行,后来把task加上了一个option字段,指定了任务队列,就可以了,比如

     'user_task': {
            'task': 'tasks.user.excute_user_task',
            'schedule': timedelta(minutes=3),
            'options': {'queue': 'fans_followers', 'routing_key': 'for_fans_follwers'}
     },
上一篇 下一篇

猜你喜欢

热点阅读