Python2—0902笔记

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())

转载于:https://my.oschina.net/u/3959701/blog/3100784

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值