头像上传接口的异步执行

1. 首先在项目目录下创建一个异步工作单元文件夹worker
2. 创建init和config文件,内容分别是:

init:

#!/usr/bin/env python
import os

from celery import Celery
from worker import config

# 加载Django的settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "social_demo.settings")
# 定义celery
celery_app = Celery('worker')
# config_from_object自动从config模块里面加载配置
celery_app.config_from_object(config)
# 自动发现Django中有哪些任务
celery_app.autodiscover_tasks()

worker:

broker_url = 'redis://127.0.0.1:6379/1'
broker_pool_limit = 100  # Borker 连接池, 默认是10

timezone = 'Asia/Shanghai'
# 处理任务内容的类型
accept_content = ['pickle', 'json']

# redis需要字符串类型才能存储   利用pickle序列化一下
task_serializer = 'pickle'
result_expires = 3600  # 任务过期时间

# 结果保存
result_backend = 'redis://127.0.0.1:6379/1'
result_serializer = 'pickle'
result_cache_max = 10000  # 任务结果最大缓存数量

# 日志级别
worker_redirect_stdouts_level = 'INFO'
3. 然后在用接口函数调用
# 上传头像
def upload_avatar(request):
    avatar_file = request.FILES['avatar']
    # 通过delay让celery异步执行
    logics.upload_avatar.delay(request.user, avatar_file)
    return render_json()
4. 服务器上面开启服务,另外再开启一个celery进程
python manage.py runserver
celery worker -A worker --loglevel=info
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异...
    青峰星宇阅读 23,109评论 0 52
  • 1.定义: Celery是一个异步的任务队列(也叫做分布式任务队列) 2.工作结构 Celery分为3个部...
    四号公园_2016阅读 28,811评论 5 60
  • Celery 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会采用...
    HAO延WEI阅读 3,528评论 1 5
  • 在学习Celery之前,我先简单的去了解了一下什么是生产者消费者模式。 生产者消费者模式 在实际的软件开发过程中,...
    c2db9ba35639阅读 3,569评论 0 8
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32