使用也有大半年了。稳定性没话说啊。

但有一个坑,是我以前没注意的,记录下来。

就是本来一个任务是可以异步并行执行的。、但如何需要CELERY的执行结果来作判断的话,就会变得异步串行的。

这要值得注意。

比如以下这段代码的实现,开始,我用RESULT结果判断再来更新数据库,就变成串行的,一次只能启动一个worker,

于是,我将更新数据库放到同一个deplay函数之后,就可以并行执行啦。

def rsync_dir(site_name, app_name, deploy_version):
    file_path = "/xxx/autodeploy/" \
                + site_name + "/" + app_name + "/" + deploy_version + "/"
    src_file_name = file_count_name(file_path)
    file_name = os.path.basename(src_file_name)
    md5_value = md5sum(src_file_name)
    DeployPool.objects.filter(name=deploy_version).update(md5_value=md5_value)
    subserver_set = SubServer.objects.filter(app_name__name=app_name)
    for item in subserver_set:
        salt_cmd_run.delay(site_name, app_name, deploy_version, item.id, md5_value, file_name)

@celery_app.task(time_limit=360)
def salt_cmd_run(site_name, app_name, deploy_version, subserver_id, md5_value, file_name):
    result = ""
    item = SubServer.objects.get(id=subserver_id)
    tgt = item.server_ip.name
    op_name = item.op_name
    server_env = item.server_ip.server_env
    server_sys = item.server_ip.server_sys
    if server_sys == "WINDOWS":

            rsync_to_path = "D:\\var\\ops\\autodeploy\\%s\\%s\\%s" % (site_name, app_name, deploy_version)
    else:

    cmd_str = "rsync -avP  --block-size=512 --timeout=600 --checksum --port=4505 " \
              + "rsync://1//prism/%s/%s/%s/ /var/ops/autodeploy/%s/%s/%s/" % \
                (site_name, app_name, deploy_version, site_name, app_name, deploy_version)
    result = saltapi_inst(server_env).cmd_run(tgt, cmd_str)
    print result, '========rsync result==============='
    if "error" not in str(result):
        if server_sys == "LINUX":
            tgt_file_name = "/xxx/autodeploy/%s/%s/%s/%s" % (site_name, app_name, deploy_version, file_name)
            cmd = "md5sum %s" % tgt_file_name
            result = saltapi_inst(server_env).cmd_run(tgt, cmd)
            if md5_value in str(result):
                item.rsync_status = True
                item.save()
    else:
            item.rsync_status = False
            item.save()
    cmd = "chown -R %s /var/ops" % op_name
    saltapi_inst(server_env).cmd_run(tgt, cmd)

  

关于使用CELERY的一点心得的更多相关文章

  1. WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信

    原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...

  2. 使用Webbrowser的一点心得体会

    原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...

  3. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  4. 【并行计算与CUDA开发】基于NVIDIA显卡的硬编解码的一点心得 (完结)

    原文:基于NVIDIA显卡的硬编解码的一点心得 (完结) 1.硬解码软编码方法:大体流程,先用ffmpeg来读取视频文件的包,接着开启两个线程,一个用于硬解码,一个用于软编码,然后将读取的包传给解码器 ...

  5. 关于使用Exception的一点心得

    毫无疑问,Exception有很多优点.查看任何一本面向对象的书籍,都会提到异常相对于返回值标记状态的不足以及避免错误导致程序崩溃的问题.看起来是很好的,用起来也是很好的.可是这么多年过去了,异常用的 ...

  6. SVM一点心得体会

    支持向量机的学习说是刚刚开始,又不合理,只能说隔了很长的时间再看,终于在分类这块的层面上有了新的认识. 总的来说,支持向量机分为线性支持向量机和非线性支持向量机,线性支持向量机又可以分为硬间隔最大化线 ...

  7. 记录自己对EventLoop和性能问题处理的一点心得

    1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构.这种结构多是基于IO多路转接的API(select.poll.epoll之类)以reactor模 ...

  8. 从Eclipse转移到IntelliJ IDEA一点心得

    http://www.ituring.com.cn/article/37792 本人使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclipse转过来的很多人开 ...

  9. Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸

    一.引言 Android的开源使厂商无需自行研发OS,大大降低了研发.生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...

随机推荐

  1. Oracle虚拟机配置

    1.正常安装 .配置 3.监听配置 4.重启监听服务 5.防火墙端口放行 6.Oracle客户端连接工具测试

  2. c语言—栈区,堆区,全局区,文字常量区,程序代码区 详解

    转:http://www.cnblogs.com/xiaowenhui/p/4669684.html 一.预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(sta ...

  3. USB接口大百科:看完你就分得清充电线了

    http://tech.ifeng.com/a/20151116/41507221_0.shtml

  4. Oracle 参考脚本

    一.创建物化视图 --新建表空间 CREATE TABLESPACE MLOG_TBS LOGGING DATAFILE 'mlog_tbs.dbf' SIZE 32M AUTOEXTEND ON N ...

  5. 382 Linked List Random Node 链表随机节点

    给定一个单链表,随机选择链表的一个节点,并返回相应的节点值.保证每个节点被选的概率一样.进阶:如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?示例:// 初始化一个单链表 ...

  6. [oracle]表空间情况查看、占用、扩容、使用情况、空间维护等操作

    --查询表空间使用情况SELECT Upper(F.TABLESPACE_NAME)         "表空间名",       D.TOT_GROOTTE_MB          ...

  7. 系统异常 NSException.h

    FOUNDATION_EXPORT NSExceptionName const NSGenericException; FOUNDATION_EXPORT NSExceptionName const ...

  8. Understanding and Analyzing Application Crash Reports

    Introduction When an application crashes, a crash report is created and stored on the device. Crash ...

  9. ARX亮显问题

    转载一段acedSSSetFirst的用法仅供参考:打个比方,我创建了一个命令,这个命令的功能是提示用户选择,然后只过滤文本对象作为选择集,随后在屏幕上使得这个选择集的所有成员都亮显,并且能够显示出各 ...

  10. vue之基础---组件基础

    (1)基本示例 Vue组件示例 /* 先注册组件,定义一个名为button-component的新组件 */ Vue.component('button-component',{ data:funct ...