千家信息网

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

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这期内容当中小编将会给大家带来有关Django中如何使用django-celery完成异步任务 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Django中如何使用
千家信息网最后更新 2026年11月04日Django中如何使用django-celery完成异步任务

这期内容当中小编将会给大家带来有关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. from apps import task

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

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


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

  9. 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完成异步任务 了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

任务 模式 方法 日志 运行 内容 就是 进程 项目 分析 测试 相同 专业 中小 代码 内容丰富 函数 功能 只有 手工 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技与互联网 盈实互联网科技 互联网巨头科技公司 关于新基建和互联网科技 喔噻互联网科技 互联网科技英文翻译 成都狮子座互联网科技 科技大学互联网专业好不好 农村开互联网科技讲堂 现代科技和互联网有关系吗 银川新华互联网科技职业技术培训学校图片 华服互联网科技官网 洛阳昕诺飞互联网科技有限公司 互联网科技和信息 想开互联网科技公司怎么样 高科技互联网发展前景如何 城市宝互联网科技有限公司 工业互联网科技成果转化 互联网风格科技公司名称 扫呗互联网科技有限公司 互联网是第几次科技革命的成果 智能科技公司是互联网公司吗 互联网下的科技发展 互联网科技战争 合肥互联网科技公司 互联网科技的英文 广州互联网络科技有限公司 中国的互联网科技企业的崛起 陕西九四连强互联网科技有限公司 互联网的科技体现在哪里
0