我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django celery怎么实现异步任务操作并在后台运行守护进程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django celery怎么实现异步任务操作并在后台运行守护进程

这篇文章主要介绍了Django celery怎么实现异步任务操作并在后台运行守护进程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

没废话,直接上代码。

环境说明:

python3.6

django2.0.5

我们使用redis的作为celery任务队列,有一个合成包可以直接安装两者一起使用需要的安装包

直接在终端键入

pip install celery-with-redis

就可以安装需要的依赖包了

构建项目过程略过,直接开始进行celery配置

一、celery配置。

我们的项目名称为myproject,首先setting配置,添加

# celery settings# celery中间人 redis://redis服务所在的ip地址:端口/数据库号BROKER_URL = 'redis://localhost:6379/3'# celery结果返回,可用于跟踪结果CELERY_RESULT_BACKEND = 'redis://localhost:6379/3' # celery内容等消息的格式设置CELERY_ACCEPT_CONTENT = ['application/json', ]CELERY_TASK_SERIALIZER = 'json'CELERY_RESULT_SERIALIZER = 'json' # celery时区设置,使用settings中TIME_ZONE同样的时区CELERY_TIMEZONE = TIME_ZONE

然后在PATH/myproject/myproject/即setting的同级目录下创建celery.py,初始化celery。

from __future__ import absolute_import, unicode_literals from celery import Celeryfrom django.conf import settingsimport os # 获取当前文件夹名,即为该Django的项目名project_name = os.path.split(os.path.abspath('.'))[-1]project_settings = '%s.settings' % project_name # 设置环境变量os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings) # 实例化Celeryapp = Celery(project_name) # 使用django的settings文件配置celeryapp.config_from_object('django.conf:settings') # Celery加载所有注册的应用app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

这里第一行输入不能换位置,只能在首行,否则会报错。

这里的实例化celery的app我们在别处要导入,为了方便导入,我们把它放到__init__.py里,所以在/myproject/myproject/__init__.py我们加入

from __future__ import absolute_import, unicode_literals # 引入celery实例对象from .celery import app as celery_app

这样同时也能告知django celery.py文件的存在。

二、用celery装饰我们的需要进行的异步函数。

我们在项目根目录下创建celery_tasks模块,即在PATH/myproject/下创建该模块,然后在该模块下创建tasks.py,把我们的耗时程序写进去。

from myproject import celery_appimport time @celery_app.taskdef time_consuming_fun():  for i in range(5):    time.sleep(1)    print(i)  return 'ok'

直接用我们的celery_app下的task方法装饰需要进行异步处理的函数即可。

三、调用异步函数。

在view中调用,这里用的是Django的类视图。

from celery_tasks.tasks import time_consuming_funfrom django.views import Viewfrom django.http import JsonResponse # Create your views here. class MyView(View):  def get(self,request):    #异步调用    time_consuming_fun.delay()    #直接调用    #time_consuming_fun()    return JsonResponse({'msg':'ok','code':200})

配置好url即可。

四、启动celery。

在项目根目录下,即managy同级文件目录下,输入命令:

celery -A myproject worker -l info

此时celery在终端窗口运行,关闭终端celery就会停止。

输入命令

celery multi start w1 -A myproject -l info --logfile = celerylog.log --pidfile = celerypid.pid

此时celery为守护进程,日志记录在celerylog.log里。

日志文件可以指定路径PATH/celerylog.log,此时会在指定路径下创建日志文件。进程号文件类似。

停止或重启将开始换为stop或restart即可,所以需记录w1,即需记录woker的名称来方便重启和停止。

补充:Django项目后台不挂断运行

方法一:

进入项目目录下,运行下面程序:

nohup python manage.py runserver 0.0.0.0:5008 &

nohup(no hang up)用途:不挂断的运行命令

&用途:在后台运行

nohup /root/start.sh &

在shell中回车后提示:

[~]$ appending output to nohup.out

原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

注意:在nohup执行成功后直接点击关闭程序按钮关闭终端,会断掉该命令对应的session,导致nohup对应的进程被通知一起shutdown。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。

方法二:这个比较高级,使用screen

安装screen

yum install -y screen

新建一个screen

screen -S xiedi

这样会新开一个窗口,然后执行命令即可

python manage.py runserver 0.0.0.0:9000

重开一个窗口,列出所有screen进程,如下

[root@docker ~]# screen -lsThere are screens on:    3029.xiedi  (Attached)

如果想链接上这个会话,执行命令即可

screen -r 3029

感谢你能够认真阅读完这篇文章,希望小编分享的“Django celery怎么实现异步任务操作并在后台运行守护进程”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django celery怎么实现异步任务操作并在后台运行守护进程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django celery怎么实现异步任务操作并在后台运行守护进程

这篇文章主要介绍了Django celery怎么实现异步任务操作并在后台运行守护进程,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。没废话,直接上代码。环境说明:python3
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录