文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Django中如何使用django-celery完成异步任务

2023-06-04 11:40

关注

这期内容当中小编将会给大家带来有关Django中如何使用django-celery完成异步任务 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Django中如何使用django-celery完成异步任务 

安装Celery

我们可以使用pip在vietualenv中安装:

 pip install django-celery  celery

django settings设置

  1. import djcelery


  2. djcelery.setup_loader()

  3. BROKER_URL = 'redis://127.0.0.1:6379/2'   ---使用redis当消息队列



注册

  1. INSTALLED_APPS = [

  2.     'django.contrib.admin',

  3.     'django.contrib.auth',

  4.     'django.contrib.contenttypes',

  5.     'django.contrib.sessions',

  6.     'django.contrib.messages',

  7.     'django.contrib.staticfiles',

  8.     'devops',

  9.     'apps',

  10.     'common',

  11.     'djcelery',

  12. ]



在apps下创建一个task.py文件

  1. from celery import task


  2. @task

  3. def add(x, y):

  4.     return x + y

 

  @task
 def pp():
 return 'ffffffffffffffffffffff'


返回settings将其导入进去

  1. import djcelery

  2. djcelery.setup_loader()

  3. BROKER_URL = 'redis://127.0.0.1:6379/2'

  4. CELERY_IMPORTS = ('apps.task')


随意选个views中的方法调用改task测试下

  1. #项目列表

  2. def project_list(request):

  3.     admin = Admin.objects.get(id=get_current_admin_id(request))

  4.     pt=admin.projects.all().order_by('-id')

  5.    

  6.     from apps import task

  7.     tt=task.add.delay(2,2)

  8.     print 'vvvvvvvvvvvvvvvvvvvv',tt              -----访问该功能时调用task的add方法


  9.     page_objects = pages(pt, request, 5) ##分页

  10.     return render_to_response('project/project_list.html',locals())



安装启动redis:略

启动runserver 与 celery

  1. python manage.py runserver

  2. python manage.py celery worker --loglevel=info



访问对应的页面看日志

  1. [2017-11-10 14:55:17,016: INFO/MainProcess] Task apps.task.add[9bafe6d2-8411-4f5f-8eed-10444da0ae3a] succeeded in 0.00280212797225s: 4   --可以看到worker日志,返回结果



手工测试task
  1. 打开新的terminal, 激活virtualenv, 并切换到django项目目录:

  2.     $ python manage.py shell

  3.     >>> from apps.task import add

  4.     >>> add.delay(2, 2)

  5. 此时, 你可以在worker窗口中看到worker执行该task:

  6.     [2014-10-07 08:47:08,076: INFO/MainProcess] Got task from broker: myapp.tasks.add[e080e047-b2a2-43a7-af74-d7d9d98b02fc]

  7.     [2014-10-07 08:47:08,299: INFO/MainProcess] Task myapp.tasks.add[e080e047-b2a2-43a7-af74-d7d9d98b02fc] succeeded in 0.183349132538s: 4


Eager模式
  1. Eager模式

  2. 如果在settings.py设置:

  3.     CELERY_ALWAYS_EAGER = True


  1. 那么Celery便以eager模式运行, 则task便不需要加delay运行:

  2.     # 若启用eager模式, 则以下两行代码相同

  3.     add.delay(2, 2)

  4.     add(2, 2)



dj-celery 定时任务
  1. settings配置添加


     如果需要传参可以这样写



    1. CELERYBEAT_SCHEDULE = {

    2.    'add-every-3-minutes': {

    3.        'task': 'apps.task.add',

    4.        'schedule': timedelta(seconds=3),

    5.         'args': (16, 16)

    6.    },

    7. }

    8. CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定时任务

    9. CELERYBEAT_SCHEDULE = {

    10.    'add-every-3-seconds': {

    11.        'task': 'apps.task.pp',

    12.        'schedule': timedelta(seconds=3)   ---每隔3秒 执行task下的pp函数

    13.    },

    14. }

  2. 启动celery beat

    1. 其实还有一种简单的启动方式worker和beat一起启动:

    2. python manage.py celery worker --loglevel=info --beat

    3. 启动beat

    4. 执行定时任务时, Celery会通过celerybeat进程来完成. Celerybeat会保持运行, 一旦到了某一定时任务需要执行时, Celerybeat便将其加入到queue中. 不像worker进程, Celerybeat只有需要一个即可.

    5. 启动:

    6. python manage.py celery beat --loglevel=info

  3. 查看worker日志

    1. [2017-11-10 16:17:25,853: INFO/MainProcess] Received task: apps.task.pp[8a3af6fb-5189-4647-91f2-8aa07489dd1e]

    2. [2017-11-10 16:17:25,858: INFO/MainProcess] Task apps.task.pp[8a3af6fb-5189-4647-91f2-8aa07489dd1e] succeeded in 0.00379144400358s: 'ffffffffffffffffffffff'

    3. [2017-11-10 16:17:28,858: INFO/MainProcess] Received task: apps.task.pp[d87e4ea0-8881-449a-b993-e7657f50ef25]

    4. [2017-11-10 16:17:28,864: INFO/MainProcess] Task apps.task.pp[d87e4ea0-8881-449a-b993-e7657f50ef25] succeeded in 0.0049942266196s: 'ffffffffffffffffffffff'

    5. [2017-11-10 16:17:31,859: INFO/MainProcess] Received task: apps.task.pp[4d05b4f3-92ff-4922-a8f4-7e047749239a]

    6. [2017-11-10 16:17:31,865: INFO/MainProcess] Task apps.task.pp[4d05b4f3-92ff-4922-a8f4-7e047749239a] succeeded in 0.00537821277976s: 'ffffffffffffffffffffff'

    7. [2017-11-10 16:17:34,859: INFO/MainProcess] Received task: apps.task.pp[5b21afc1-ebf1-4858-be68-20b9bf318452]

    8. [2017-11-10 16:17:34,865: INFO/MainProcess] Task apps.task.pp[5b21afc1-ebf1-4858-be68-20b9bf318452] succeeded in 0.00530335493386s: 'ffffffffffffffffffffff'


补充还有另外一种方法那就是celery

上述就是小编为大家分享的Django中如何使用django-celery完成异步任务 了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯