zoukankan      html  css  js  c++  java
  • django+celery实现异步任务

    在django项目中常常需要有些耗时的任务,比如发送邮件、短信啥的,这种情况使用celery就非常有用了。celery有原生的也有第三方封装的django-celery,但是django-celery更新不及时,而且不支持celery4,这都出来两年了(看下commit 这两年半django-celery也没怎么提交新的代码), 如果你使用的是(<celery4.0)+(<=django1.8)可以考虑使用他否则请不要使用(2018.04.10是这样,当你看到的时候我不确定有没有更新,请自行决定)。由于我使用的是django1.11版本所以我只能使用原生的celery
    官方文档
    1.安装

    pip install celery
    

    2.broker,我这里使用的是redis,官方更推荐使用librabbitmq

    pip install celery[redis]
    

    3.django集成官方文档
    4. 启动broker

    celery -A <proj_name> worker -l info
    

    我这里报错提示Celery ValueError: not enough values to unpack (expected 3, got 0)
    issue里有这个问题的解决办法
    4.1 pip安装eventlet

    pip install eventlet
    

    4.2 启动参数

    celery -A <proj_name> worker -l info -P eventlet
    

    5.关于序列化方式
    在celery3.x 默认的序列化方式是pickle,但在celery4.x已经变成了json,json更为通用 问题也少,但是却不能序列化字节码,我的需求中出现了字节码序列化的要求所以必须修改一下配置

    CELERY_RESULT_SERIALIZER = 'pickle'
    CELERY_TASK_SERIALIZER = 'pickle'
    CELERY_ACCEPT_CONTENT = ['application/x-python-serialize']
    
    1. 关于结果的过期时间
      如果线上项目不停的运行积累的任务结果也越来越多,肯定会撑爆redis,默认结果只会保存5000条,但是这不能完全满足我的需求 ,如果能设置过期时间就好了,issue上有个结果 但是经过测试无效

    celery的全部配置项

  • 相关阅读:
    微信证书发布涉及到的问题
    C# Timer自带定时器
    微信accesstoken回调
    c#数组乱序,打乱数组
    JS 数组乱序
    百度地图LBS开放平台AK一直没有用
    C# 微信支付证书使用
    提交失败问题一:检测到有潜在危险
    apache如何发布地图服务
    Java后端进阶教程
  • 原文地址:https://www.cnblogs.com/wsqy/p/8746191.html
Copyright © 2011-2022 走看看