5 celery结合发布
6 带坑的发布串行
celery结合发布
views.py
代码
from \_\_future\_\_ import absolute\_import, unicode\_literals
import time
import requests
from celery import shared_task
from django.views.decorators.csrf import csrf\_exempt,csrf\_protect
from django.shortcuts import render,HttpResponse,redirect
@shared_task
def add(x,y):
return x+y
@shared_task
def salt(app\_name,host\_li,package):
# 第一步 :在 自动化管理平台 里面 下载代码 (可以打包) subporcsess
# import os
# import sys
# path = os.getcwd() + r'/project_path/'
# subporcsess -->执行命令 cd path
# mkdir $app\_name && cd $app\_name
# svn co $package
# 打包
# 第二步 :推送 -->salt stack state.sls
# 写 state.sls 规则的yml 文件
# 通过python 代码 salt api 调用 state 触发 推送
# 第三步 #执行远端代码 -->cmd.run cd 路径 python xxx
return True
@shared_task
def mul(x, y):
print(x*y)
return x * y
@shared_task
def xsum(numbers):
print(sum(numbers))
return sum(numbers)
带坑的发布串行
views.py
代码
from django.shortcuts import render,HttpResponse,redirect
from django.views import View
from demo1 import models
from demo1.task import add
from celery.result import AsyncResult
from 发布.celery import app
def fabu(request):
if request.method=='GET':
env=models.RecordEnv.objects.all()
return render(request,'fabu.html',locals())
else:
env=request.POST.get('env')
app=request.POST.get('app')
obj\_li = models.App.objects.filter(name=app,environment\_\_name=env)
#拿到 对应的 主机组 代码-->地址
#循环 主机组 推送代码
app_name = 'payment'
host_li = \[{'id':'test','path':'/app/www/payment'},\]
package = 'svn://xxxxx' #sh xxxx.sh #改成自己的地址
return HttpResponse('已存入队列中')
def celery_status(req):
import datetime
import json
if req.method=='GET':
if req.GET.get('x') and req.GET.get('y'):
# 立即执行
# ret=add.delay(int(req.GET.get('x')),int(req.GET.get('y')))
if req.GET.get('after'):
ctime = datetime.datetime.now()
utc_ctime = datetime.datetime.utcfromtimestamp(ctime.timestamp())
s1 = datetime.timedelta(seconds=int(req.GET.get('after'))*60)
ctime\_x = utc\_ctime + s1
# 使用apply_async并设定时间
year=req.GET.get('year')
mouth=req.GET.get('month')
day=req.GET.get('day')
hour=req.GET.get('hour')
minute=req.GET.get('minute')
if year and mouth and day and hour and minute:
ctime = datetime.datetime(year=int(year), month=int(mouth),
day=int(day), hour=int(hour), minute=int(minute))
# 把当前本地时间转换成UTC时间
ctime_x = datetime.datetime.utcfromtimestamp(ctime.timestamp())
if ctime_x:
#最核心的 语句
ret = add.apply\_async(args=\[int(req.GET.get('x')), int(req.GET.get('y'))\], eta=ctime\_x)
num=ret.id
if req.GET.get('cancel'):
async = AsyncResult(id=req.GET.get('cancel'), app=app)
async.revoke(terminate=True)
cancel_tag='取消成功'
if req.GET.get('stop'):
async = AsyncResult(id=req.GET.get('stop'), app=app)
async.revoke()
stop_tag='中止成功'
return render(req,'celery.html',locals())
else:
ret=req.POST.get('id','')
data = ''
if ret:
async=AsyncResult(id=ret,app=app)
if async.successful():
data='执行成功,数据是:'+str(async.get())
async.forget()
elif async.failed():
data='执行失败'
elif async.status=='PENDING':
data='等待被执行'
elif async.status=='RETPY':
data='任务异常正在重试'
elif async.status=='STARTED':
data='任务正在执行'
else:
data='未知'
return render(req,'celery.html',locals())