本文主要介绍最近使用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. PS小实验-去除水印

    PS小实验-去除水印 水印是一些品牌商覆盖在图片或视频上的一个商标logo或小文本,比如大家最讨厌的百度logo,作者本人也是比较讨厌水印的,让好端端的一张图片变得美中不足. 个人觉得用photosh ...

  2. 201521123082 《Java程序设计》第7周学习总结

    201521123082 <Java程序设计>第7周学习总结 标签(空格分隔): Java 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ...

  3. 201521123083《Java程序设计》第二周学习总结

    [TOC] 1. 本周学习总结 这周我花在java里面的时间就是在做pta和看课本继承,接口和多态这几章的内容. 在pta上的总结: 详细的具体在后面pta实验中总结再说,这里先说几点. 借着List ...

  4. 201521123073 《Java程序设计》第1周学习总结

    1.本章学习总结 你对于本章知识的学习总结 1.Java中使用Scanner处理输入,需要注意如下几个地方 程序开头必须import java.util.Scanner导入Scanner类. 使用Sc ...

  5. 201521145048《java程序与设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自 ...

  6. 201521123033《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  7. 201521123106 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...

  8. 201521123019 《Java程序设计》第10周学习总结

    1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只有执 ...

  9. sql+PHP基础+面向对象基础简单总结

    一.MYSQL         1.配置MySql                 第一步安装服务器(apache).                 第二部安装MySql界面程序         2 ...

  10. Struts2标签:checkboxlist

    参考自博文:http://www.blogjava.net/koradji/articles/307399.html 语法: <s:checkboxlist name="" ...