2019独角兽企业重金招聘Python工程师标准>>>

定时任务就是按照执行计划去执行特定的任务。执行定时任务可以选择在配置文件(celeryconfig.py)中配置定时任务的相关信息(官方手册中提供了其他方式可以参考)

CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {'task': 'worker.mytask1.ticket_task', #指定定时任务'schedule': timedelta(seconds=30),#指定定时策略'args': ('a','b','c'), #任务的参数'options':dict(exchange='default',routing_key='default') # 选项参数与apply_async一致 选项参数与apply_async一致,指定exchange和routing_key表示任务会定时发送到default交换机上然后再通过routing_key路由到对应的队列上,本case中会被路由到default.},
}

完整的配置内容如下:

# -*- coding:utf-8 -*-
from datetime import timedelta
from kombu import Queue,ExchangeBROKER_URL="amqp://dev:dev12345@192.168.2.16:5672/test"
CELERY_IMPORTS = ('worker.mytask1', 'worker.mytask2','celery.task.http')
CELERY_ENABLE_UTC  = True
CELERY_TIMEZONE = 'Asia/Shanghai'CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'#CELERY_RESULT_BACKEND = 'amqp:'
CELERY_RESULT_BACKEND = 'redis://192.168.2.14:6379/8'
CELERY_QUEUES = (Queue('default',Exchange('default'),routing_key='default'),Queue('for_mytask1_task1',Exchange('for_mytask1_task1'),routing_key='for_mytask1_task1'),Queue('for_mytask2_task1',Exchange('for_mytask2_task1'),routing_key='for_mytask2_task1'),
)CELERy_ROUTES = {'worker.mytask1.task1':{'queue':'for_mytask1_task1','routing_key':'for_mytask1_task1'},'worker.mytask2.task1':{'queue':'for_mytask2_task1','routing_key':'for_mytask2_task1'},'worker.mytask2.ticket_task':{'queue':'default','routing_key':'default'}
}CELERYBEAT_SCHEDULE = {'add-every-30-seconds': {'task': 'worker.mytask1.ticket_task','schedule': timedelta(seconds=30),'args': ('a','b','c'),'options':dict(exchange='default',routing_key='default')},
}

在启动worker的时候添加-B选项,定时执行任务

celery worker --config=worker.celeryconfig   -l DEBUG -n worker.mytask1 -B

样列代码:

@app.task(bind=True)def ticket_task(self,datetime,from_station='SHH',to_station='GIW'):"""到12306网站上查询上海到贵阳的K739车次的票务情况,如果存在卧铺则发送微信消息通知"""url = 'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-09-28&from_station=SHH&to_station=GIW'res = requests.get(url,verify=False)if res and res.status_code == 200:result = json.loads(res.text)k739_train = filter(lambda x:x.get('station_train_code')=="K739",result.get('data').get('datas'))if k739_train:train_info = k739_train[0]yw_num = train_info.get('yw_num')canwebby = train_info.get('canWebBuy')yz_num = train_info.get('yz_num')body = u"""硬卧:%s可购买:%s硬座数量:%s"""%(yw_num,canwebby,yz_num)task_logger.info(body)if yw_num !=u'无':url = 'http://localhost/weixin/message/send'data = dict(user='A363977771',content={"content": body},appid=5)res = requests.post(url,json=data)return res.text if res else 'error'

定时任务的执行情况

 [2016-09-23 11:06:12,834: INFO/Beat] Scheduler: Sending due task add-every-30-seconds (worker.mytask1.ticket_task)[2016-09-23 11:06:12,835: DEBUG/Beat] worker.mytask1.ticket_task sent. id->9d0d8880-5895-4de3-946d-ca4b3efac713##[2016-09-23 11:06:12,835: DEBUG/Beat] beat: Waking up in 29.99 seconds.[2016-09-23 11:06:12,838: INFO/MainProcess] Received task: worker.mytask1.ticket_task[9d0d8880-5895-4de3-946d-ca4b3efac713]
 [2016-09-23 11:06:12,838: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fecd20b9050> (args:(u'worker.mytask1.ticket_task', u'9d0d8880-5895-4de3-946d-ca4b3efac713', [u'a', u'b', u'c'], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [u'a', u'b', u'c'], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'default', u'exchange': u'default'}, u'expires': None, u'hostname': 'celery@worker.mytask1', u'task': u'worker.mytask1.ticket_task', u'callbacks': None, u'correlation_id': u'9d0d8880-5895-4de3-946d-ca4b3efac713', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'2be4ff2e-904a-3d6d-bc49-6e6cad45ab5a', u'id': u'9d0d8880-5895-4de3-946d-ca4b3efac713', u'headers': {}}) kwargs:{})[2016-09-23 11:07:12,881: INFO/Worker-4] Starting new HTTPS connection (1): kyfw.12306.cn[2016-09-23 11:07:12,916: WARNING/Worker-4] /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.htmlInsecureRequestWarning)
 [2016-09-23 11:07:12,975: DEBUG/Worker-4] "GET /otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-09-28&from_station=SHH&to_station=GIW HTTP/1.1" 200 None[2016-09-23 11:07:12,977: INFO/Worker-4] worker.mytask1.ticket_task[c4d43a06-ce70-4558-b402-7c2c5d0bc4c1]:硬卧:无可购买:Y硬座数量:298[2016-09-23 11:07:12,979: INFO/MainProcess] Task worker.mytask1.ticket_task[c4d43a06-ce70-4558-b402-7c2c5d0bc4c1] succeeded in 0.0983848370015s: None

源码地址

转载于:https://my.oschina.net/hulingfeng/blog/750669

Celery入门--定时任务的开发及运行相关推荐

  1. idea怎么运行eclipse的web项目_Apache Storm v2.0入门项目的开发、测试和运行(IDEA/Maven)...

    第一个Apache Storm v2.0流计算入门项目的开发.测试和运行(IDEA/Maven) 关于流计算框架Apache Storm最新版的安装,可以参考: 流计算框架-最新版Apache Sto ...

  2. WPF 项目开发入门(一) 安装运行

    WPF 项目开发入门(一) 安装运行 WPF 项目开发入门(二) WPF 页面布局 WPF 项目开发入门(三)WPF 窗体与页面 WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件 ...

  3. django项目用celery实现定时任务

    celery beat 简介 在项目开发过程中,经常遇到要定期执行的任务,如定期备份数据,检查设备状态,定时发送邮箱等,celery beat 是1个开发效率很高的定时任务框架,而且运行非常稳定. C ...

  4. Arduino可穿戴开发入门教程Arduino开发环境介绍

    Arduino可穿戴开发入门教程Arduino开发环境介绍 Arduino开发环境介绍 Arduino不像我们使用的PC端操作系统一样,可以直接在操作系统中安装软件为操作系统编程.Arduino的软件 ...

  5. flask + celery实现定时任务和异步

    参考资料: Celery 官网:http://www.celeryproject.org/ Celery 官方文档英文版:http://docs.celeryproject.org/en/latest ...

  6. 物联网入门学什么开发板_物联网入门:如何构建DIY Blynk板

    物联网入门学什么开发板 本教程适用于具有一定DIY硬件经验的人,尽管高级初学者可能会发现这是一个有趣的挑战. 此外,有经验的用户可能会发现设置此方法有趣,以便初学者学习. 要使该板不 带有带有Blyn ...

  7. 快速入门Web前端开发的正确姿势

    入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术栈肯定是需 ...

  8. 最详细,快速入门Web前端开发的正确姿势

    入门标准 入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术 ...

  9. es6标准入门第3版pdf_最详细,快速入门Web前端开发的正确姿势

    入门标准 入门标准很简单,就一条:达到能参与 Web 前端实际项目的开发水平.请注意,是实际项目,这就需要了解如今的实际项目开发都用了哪些技术栈.HTML/CSS/JavaScript 这三大基础技术 ...

最新文章

  1. “带货”的逻辑:直播电商产业链研究报告
  2. Hadoop初次接触后感
  3. 谷歌全新OS曝光:它是操作系统世界里一种全新的艺术
  4. 重新认识fprint,sprint
  5. Android淘宝客链接自动跳转淘宝APP问题
  6. 锁定计算机还能远程控制,我的电脑可能被远程控制
  7. fgo服务器维护 石头,FGO发石头玩家的四种表现 第三种要注意了
  8. java实现图片的预览_Java实现图片裁剪预览功能
  9. 思科二层交换机系列------设备更换详细配置命令
  10. java 判断正态分布_如何判断一个样本是否来自正态分布的总体?
  11. C语言——函数定义及用法【内部函数外部函数内联函数】
  12. 安卓毕业设计源码基于Uniapp+SSM实现的校园心理健康APP
  13. Xilinx FPGA全局时钟和局部时钟
  14. Android Studio App设置背景图片
  15. RxSwift系列—RxSwift核心逻辑
  16. 机器视觉的相机标定到底是什么?
  17. 自己动手写数据库系统:容灾恢复原理和容灾恢复日志的设计
  18. Linux 服务器被黑后处理方法
  19. 2021第十一届中国轻工业信息化大会专访——帆软软件
  20. jave Duration: N/A, bitrate: N/A

热门文章

  1. c# datetime._C#| DateTime.TimeOfDay属性(带示例)
  2. 广东省民营企业合作交流协会会长谭铭卓一行到访
  3. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)...
  4. Fluent Mybatis 牛逼
  5. UVM RAL 中的显示预测 uvm_reg_predictor
  6. 在线EXCEL编辑器-Luckysheet
  7. SQL注入原理及联合查询
  8. 基于opencv的手势识别(HSV)控制鼠标
  9. 超低功耗MCU的选择方法
  10. 克劳士比语录(转载)