如何利用 Celery 执行定时任务并设置优先级

如何利用 Celery 执行定时任务并设置优先级,第1张

运行 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 完成异步任务等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9729436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存