本文主要介绍最近使用celery遇到的两个坑。关于时区,以及是否保留结果(celery使用rabbitmq)。

先说结论:定时任务记得配置时区;丢弃结果对使用rabbitmq对celery来说,性能提升巨大。

第一部分:celery使用定时任务功能的时候,通常配置如下

CELERYBEAT_SCHEDULE = {
'query-every-day': {
'task': 'xxx',
'schedule': crontab(hour=16, minute=35)
},
'delete-every-1-second': {
'task': xxxx',
'schedule': crontab(minute='*/1')
},
'update-every-1-second': {
'task': 'xxxxx,
'schedule': timedelta(seconds=60)
}
}

针对xxxxx任务,每60秒执行一次;针对xxxx任务,每分钟执行一次;针对xxx任务,每天16时35分执行一次。

启动

celery -A start.celery beat -s celerybeat-schedule

这样配置,后面俩间隔时间执行的定时任务执行良好。

而第一个设置每天绝对时间的任务没有在配置的时间执行,查询发现有时区这个东西。需要配置如下:

CELERY_TIMEZONE = 'Asia/Shanghai'

ps:最开始尝试的'Asia/Hongkong',报错了。看来祖国大陆的地位越来越高。

第二部分:celery的是否保留结果配置

丢弃结果配置如下:

CELERY_IGNORE_RESULT = True

为什么会推荐丢弃结果呢?

在压测使用rabbitmq对celery时发现,每次执行单个的简单加减任务,会耗时0.1秒左右(慢哭)。

完成任务至7000时,rabbitmq出问题了,日志显示:

Recovering 7008 queues, avilable file handles: 4764. Please increase mas open file handles limit to at least 7008

Mnesia(rabbit@localhost): ** WARNING ** Mnesia is overloaded: {dump_log,write_threshold}

这才发现,使用rabbitmq的celery,每一次完成任务,都会为这个任务建一个队列。。。在获取这个结果之后队列才删除。

并且这个建队列的性能开销非常大:保留结果完成一个任务耗时0.1秒左右,丢弃结果平均一个任务耗时0.001秒左右

google了一下Mnesia的配置,找到有解决方案,但最后并没有使用,因为这个确实用不着保留结果,并且性能的损失不太能接受。

后来发现了一篇celery最佳实践有讲到丢弃结果这个事情:http://blog.csdn.net/siddontang/article/details/34447003

python celery 时区&结果(性能)的坑的更多相关文章

  1. python celery + redis

    redis http://debugo.com/python-redis celery http://docs.jinkan.org/docs/celery/getting-started/intro ...

  2. Python编程规范及性能优化(转载)

    转载地址:http://codeweblog.com/python编程规范及性能优化/

  3. 小测几种python web server的性能

    http://blog.csdn.net/raptor/article/details/8038476 因为换了nginx就不再使用mod_wsgi来跑web.py应用了,现在用的是gevent-ws ...

  4. python celery多worker、多队列、定时任务

    python celery多worker.多队列.定时任务  

  5. Python 优化第一步: 性能分析实践 使用cporfile+gprof2dot可视化

    拿来主义: python -m cProfile -o profile.pstats to_profile.py gprof2dot -f pstats profile.pstats |dot -Tp ...

  6. python函数式编程,性能,测试,编码规范

    这篇文章主要是对我收集的一些文章的摘要.因为已经有很多比我有才华的人写出了大量关于如何成为优秀Python程序员的好文章. 我的总结主要集中在四个基本题目上:函数式编程,性能,测试,编码规范.如果一个 ...

  7. Python 读取图像文件的性能对比

    Python 读取图像文件的性能对比 使用 Python 读取一个保存在本地硬盘上的视频文件,视频文件的编码方式是使用的原始的 RGBA 格式写入的,即无压缩的原始视频文件.最开始直接使用 Pytho ...

  8. python—Celery异步分布式

    python—Celery异步分布式 Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向brok ...

  9. python测试mysql写入性能完整实例

    这篇文章主要介绍了python测试mysql写入性能完整实例,具有一定借鉴价值,需要的朋友可以参考下 本文主要研究的是python测试mysql写入性能,分享了一则完整代码,具体介绍如下. 测试环境: ...

随机推荐

  1. java.lang.OutOfMemoryError 解决程序启动内存溢出问题

    java.lang.OutOfMemoryError: Java heap space Myeclipse里面部署的java web项目,浏览器访问的时候出现错误: type Exception re ...

  2. 【Socket编程】Java通信是这样炼成的

    简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 ...

  3. 团队作业9——展示博客(Beta版本)

    展示博客 1.团队成员的简介和个人博客地址,团队的源码仓库地址. 何琴琴(http://www.cnblogs.com/vviane/): 领导项目进行,协调各队员之间的矛盾合作,负责测试与需求分析. ...

  4. 团队作业8——第二次项目冲刺(Beta阶段)5.22

    1.当天站立式会议照片 会议内容: ①:检查总结上次任务完成情况 ②:安排本次任务的分工 ③:反思前三次自己的不足 ④:协商解决代码进度.成员投入时间等问题 2.每个人的工作 工作中遇到的困难: 代码 ...

  5. 【Alpha】——Fifth Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 测试统计功能 对统计出现的问题进一步完善 郑靖涛 着手编写报表设计 继续报表设计 杨海亮 协助编写统计功能 ...

  6. 201521123101 《Java程序设计》第2周学习总结

    1. 本周学习总结 使用码云保存管理自己的代码: 学习String和Array: 继续对JAVA的探索,希望以后能在编程上更顺畅一些 2. 书面作业 1.使用Eclipse关联jdk源代码(截图),并 ...

  7. 在dropwizard中使用feign,使用hystrix

    前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...

  8. mongodb 3.4 集群搭建升级版 五台集群

    最新版mongodb推荐使用yaml语法来做配置,另外一些旧的配置在最新版本中已经不在生效,所以我们在生产实际搭建mongodb集群的时候做了一些改进.如果大家不熟悉什么是分片.副本集.仲裁者的话请先 ...

  9. Jquery Ajax type的4种类型

    Ajax type这个里面填什么呢?通常大家都会说get和post.那么还有2个是什么呢 $.ajax({ url: 'http://www.cnblogs.com/youku/', type: '' ...

  10. GCD之Apply

    dispatch_apply函数是dispatch_sync函数和dispatch_group的结合体.该函数将按指定的次数将指定的block追加到指定的dispatch queue中,并等待全部处理 ...