django+celery异步调用与定时处理的基本配置

1.创建一个django项目bookcity
2在项目bookcity的目录bookcity里
settings.py

	import djcelery
	
	....
	INSTALLED_APPS = [
   	...
    'djcelery',  # 添加djcelery
   	...
]
	"""celery异步定时调用"""
	djcelery.setup_loader()
	BROKER_URL = 'redis://127.0.0.1:6379/2'  # 生产者
	CELERY_TIMEZONE = 'Asia/Shanghai'
	CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'  # 默认的数据库调度模型,任务执行周期都被存在默认指定的orm数据库中
	BROKER_TRANSPORT = 'redis'
	CELERY_RESULT_SERIALIZER = 'json'  # 结果序列化方案
	# CELERYD_MAX_TASKS_PER_CHILD = 40  # 每个worker执行了多少任务就会死掉,我建议数量可以大一些,

然后在该目录里创建 celery.py

from __future__ import absolute_import, unicode_literals

import os
from celery import Celery, platforms
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BookCity.settings')
broker = 'redis://127.0.0.1:6379/2'  # Broker配置,使用Redis作为消息中间件
backend = 'redis://127.0.0.1:6379/3'  # 存储结果

# hermes主应用名
app = Celery('BookCity', broker=broker, backend=backend)
platforms.C_FORCE_ROOT = True

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from datetime import timedelta

# 定时任务
 app.conf.update(
     CELERYBEAT_SCHEDULE={
         'add-every-30-seconds': {
             'task': 'parent.tasks.count_words',  # 任务名(parent某个应用, tasks某个应用下的tasks.py, count_words任务名)
             'schedule': timedelta(seconds=60*60),  # 每3600秒执行一次该任务
         },
     }
 )

"""
celery -B -A smy0722 worker -l info  # 调试命令  同时启动work 和 beat
在终端manage同级目录下输入如下语句,可在后台运行
celery multi start w1 -A project -l info     # 本项目进程 w1-->项目进程名(自己随意取)project是你的工程目录
celery multi start w1 -B -A project -l info  # 后台同时启动work和beat
w1为你为进程起的名字,需记住,以方便重启和结束进程

关闭和重启celery
celery multi stop w1   # 结束w1进程
celery multi restart w1 -A project -l info      # 重启worker进程
celery multi start w1 -B -A project -l info  # 后台同时启动work和beat
celery status -A project       # 查看该项目运行的进程数
"""

然后在该目录的init.py中

from __future__ import absolute_import
from .celery import app as celery_app
__all__ = ['celery_app']

celery的基本配置就此完成
然后自己在每个应用下创建自己的tasks.py,写下异步调用和定时处理的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值