运行 worker
celery -A proj worker -l info
运行 app
python managepy runserver 0000:8000
然后你打开浏览器的地址
输入刚才的账号密码就可以了。
看到标题,相信大家就知道这个帖子要讲啥了……如果你希望在django中使用celery执行异步任务,用MQ(rabbimq,下同)做消息中间件,那么此贴完全可以满足你,包括celeryp、MQ配置,以及MQ路由配置等,相信你会喜欢。
简单说明一下:
1,django:web框架
2,celery: 用于创建执行异步任务
3,RabbitMQ:消息队列,主要用于消息存储
对于celery,rabbimq安装没啥好说的, pip直接装就好了,配置与启动也不赘述。关键环节简要说明如下:
一,在django中配置和使用celery
配置大致如下:
(1),工程目录下,创建celerypy, 内容编辑如下:
……
(2), 各app根目录下创建taskspy
app相关的task均放置在taskspy中,并用装饰器shared_task装饰,示例如下:
def get_jid_result(args, kwargs): pass 任务调度方法:
1)后台定时执行task,可安装djcelery模块,在django后台调度已注册的任务,关于djcelery的使用方法,在此不详细介绍。
2)触发调度,在需要调用task的d地方,直接调用各task的delay()方法即可(当然要先import),如:
get_jid_resultdelay(args, kwargs)
二, celery woker
工程目录下执行sudo -u apache bash -c 'celery -A patools worker -l info (注意,此处使用apache用户执行,celery建议不要使用superuser 启动),启动celery worker。
建议:为确保celery worker进程平稳运行, 可以使用superivsor守护该进程的执行, 配置示例如下:
进入supervisorctl, 启动相应进程,OK!
三,中间件rabbitmq
对于中间件的选择,redis,MQ都可以,差异不作详细说明,视应用情况而选择。实践中采用rabbimq作为中间件,在此,对rabbimq路由做简单说明。
django settings配置,如celery配置部分, 另外,配置消息路由:
CELERY_DEFAULT_QUEUE = 'default'CELERY_DEFAULT_EXCHANGE = 'default'
CELERY_DEFAULT_EXCHANGE_TYPE = 'direct'
CELERY_DEFAULT_ROUTING_KEY = 'default'# routing task
CELERY_IMPORTS = (
# 注册各应用tasks文件在此,注意,必须确保注册模块存在,否则将导致worker进程报错
"app1tasks",
"app2tasks",
# other apps
)
#交换器定义,示例如下:
# 路由定义, 示例如下:
以上是我在搭建基于Django框架的过程中对celery及MQ配置应用实践的小结,希望对有相关需求的同志们有些许的帮助,不足之处多多批评指正。
python 虚拟环境管理工具
错误提出及讨论:
解决方案:
运行 python managepy celery worker -l INFO 时报错:
参考:
解决方案:
说明:这是因为在 python 37 中将 async 作为了关键字,所以当 py 文件中出现类似 from import async, base 这类不符合python语法的语句时,Python会报错。
解决:
用Python Django做了一个网站。后端有些周期抓数据的需求,分布式任务队列 Celery 派上了用场。
投入使用后,发现一个问题,运行一段时间后,周期更新的数据刷新时间停留在几天之前,Celery任务莫名其妙就不起作用了。查看日志,Celery beat日志是按周期在更新,但Celery worker日志停留在几天之前。查看进程,beat、worker进程均运行良好。一头雾水。每次碰到这种情况,只能重启。然后过一段时间又不起作用了,断断续续困扰大半年时间。
曾经也暗骂python轮子咋这样不靠谱,甚至也想转投java的怀抱,用spring boot搞一下。略一思考,转投java也有切换成本,换过去之后,也会碰到这样那样的问题。如果这个技术栈上碰到问题解决不了,换个技术栈碰到问题可能还是束手无策。换到java的好处可能是使用广泛,有问题都是别人已经趟过的坑,容易找到借鉴经验。小众的技术栈就没这么好的待遇了。
那么,想办法解决问题吧。
在google多番搜索,有一些线索可供参考。其中一个是说psycopg2、与postgres使用时可能会死锁。原因是postgres使用ssl时在一个callback中加了个锁,但是个callback是共用的,postgres自己unload时会释放这个锁,但是其他使用这个callback的并不知道,然后就死锁了。解决方案是把psycopg2升级到26版本以上。
具体可以参考Media上这篇文章。 >
原因:由于误 *** 作导致或打印机系统内存已满造成的。
方法: 1、在任务栏左下角找到打印机图标,双击打印机图标,在d出的对话框中单击“打印机”,点击“取消所有文档”或在文档名中找到“状态”为错误的文档名,在文档名上点击鼠标右键,选择“取消”。
以上就是关于如何利用 Celery 执行定时任务并设置优先级全部的内容,包括:如何利用 Celery 执行定时任务并设置优先级、django+celery+rabbitmq实践、python3.7 中使用django-celery 完成异步任务等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)