[关闭]
@twein89 2016-07-11T11:31:43.000000Z 字数 1292 阅读 662

celery任务队列

celery scrapy


Celery

celery是一个分布式任务队列,其broker可以选用RabbitMQ,Redis或其他数据库,在此我们选择redis作为消息队列的broker。

1.安装模块

  1. pip install celery

2.定义任务

创建一个任务文件tasks.py:

  1. from celery import Celery
  2. app = Celery('tasks', broker='redis://username:password@localhost:6379',)
  3. @app.task
  4. def add(x, y):
  5. return x + y

3.启动worker

在task.py同级目录下,从命令行启动 celery woker 服务:

  1. celery -A tasks worker --loglevel=info

4.定时任务

添加任务

在CELERYBEAT_SCHEDULE中添加一个定期任务
例:每隔30秒跑一次task.add任务

  1. from datetime import timedelta
  2. CELERYBEAT_SCHEDULE = {
  3. 'add-every-30-seconds': {
  4. 'task': 'tasks.add',
  5. 'schedule': timedelta(seconds=30),
  6. 'args': (16, 16)
  7. },
  8. }
  9. CELERY_TIMEZONE = 'Asia/Shanghai'

Crontab schedules任务定时

使用crontab schedule类型的任务可以控制任务的执行时间,例如,某天或一周中某天的特定时间。

  1. from celery.schedules import crontab
  2. CELERYBEAT_SCHEDULE = {
  3. # Executes every Monday morning at 7:30 A.M
  4. 'add-every-monday-morning': {
  5. 'task': 'tasks.add',
  6. 'schedule': crontab(hour=7, minute=30, day_of_week=1),
  7. 'args': (16, 16),
  8. },
  9. }
Example Meaning
crontab() Execute every minute.
crontab(minute=0, hour=0) Execute daily at midnight.
crontab(minute=0, hour='*/3') Execute every three hours: midnight, 3am, 6am, 9am, noon, 3pm, 6pm, 9pm.
crontab(minute=0,hour='0,3,6,9,12,15,18,21') Same as previous.
crontab(minute='*/15') Execute every 15 minutes.
crontab(day_of_week='sunday') Execute every minute (!) at Sundays.
crontab(minute='',hour='', day_of_week='sun') Same as previous.

启动定时任务

启动celery beat 服务:

  1. celery -A proj beat
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注