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())
本文详细介绍了如何使用Celery进行任务调度,包括异步任务的定义、执行状态查询及任务取消等操作。通过示例代码展示了Celery在自动化部署流程中的应用,如代码下载、推送及远程执行。
1528

被折叠的 条评论
为什么被折叠?



