1、settings配置文件中,配置存放任务和结果的redis
# Celery
CELERY_BROKER_URL = "redis://127.0.0.1:6379/3"
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/5'
2、编写发布任务的celery.py文件
from __future__ import absolute_import
from celery.task import periodic_task, task
from django.conf import settings
from apps.aftersales.models import ChangeGoodsBill, GiveawaysBill, SupplementGoodsBill
from apps.user.models import UserOperationHistory, User
from common.erp import get_delivery_code
from common.log import sms_log
from common.sms import send_sms
user = User.objects.filter(position__position_name='匿名').first()
@periodic_task(run_every=60 * 60)
def search_gy_mail_no():
giveaway_bill = GiveawaysBill.objects.filter(state=2, warehouse=1)
change_goods_bill = ChangeGoodsBill.objects.filter(sending_state=3, warehouse=1)
supplement_goods_bill = SupplementGoodsBill.objects.filter(state=2, warehouse=1)
changed_g = []
changed_c = []
changed_s = []
for g in giveaway_bill:
gy_id = g.gy_id
if gy_id:
mail_no = get_delivery_code(gy_id)
if mail_no:
g.sending_waybill_id = mail_no
g.state = 3
g.save()
UserOperationHistory.objects.create(
table=5, user=user,
bill_id=g.id, params="GY-erp{'state':%s}" % 3
)
changed_g.append(g.id)
for c in change_goods_bill:
gy_id = c.gy_id
if gy_id:
mail_no = get_delivery_code(gy_id)
if mail_no:
c.sending_waybill_id = mail_no
c.sending_state = 4
if c.receiving_state == 2:
c.state = 2
c.save()
UserOperationHistory.objects.create(
table=2, user=user,
bill_id=c.id, params="GY-erp{'sending_state':%s}" % 4
)
changed_c.append(c.id)
for s in supplement_goods_bill:
gy_id = s.gy_id
if gy_id:
mail_no = get_delivery_code(gy_id)
if mail_no:
s.sending_waybill_id = mail_no
s.state = 3
s.save()
UserOperationHistory.objects.create(
table=3, user=user,
bill_id=s.id, params="GY-erp{'state':%s}" % 3
)
changed_s.append(s.id)
return {
'changed_g': changed_g,
'changed_c': changed_c,
'changed_s': changed_s,
}
@task
def send_shipments_sms(phone, express, sending_waybill_id):
params_dict = dict()
params_dict["express"] = express if express else "物流公司"
params_dict["tracking_number"] = sending_waybill_id
sms_template_code = settings.SMS_DELIVERY_RELEASE_CODE
res = send_sms(phone, sms_template_code, params_dict)
res["sms_template_code"] = sms_template_code
sms_log.info(str(res))
3、启动定时任务和异步任务
python manage.py celery worker -B -l info -f '/home/wise/Desktop/after_sale.log' --settings=narwal_after_sale_system.settings.testing
4、安装的包
# celery
celery==3.1.26.post2
django-celery==3.3.1