关于使用CELERY的一点心得
使用也有大半年了。稳定性没话说啊。
但有一个坑,是我以前没注意的,记录下来。
就是本来一个任务是可以异步并行执行的。、但如何需要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的一点心得的更多相关文章
- WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信
原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...
- 使用Webbrowser的一点心得体会
原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...
- 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得
谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...
- 【并行计算与CUDA开发】基于NVIDIA显卡的硬编解码的一点心得 (完结)
原文:基于NVIDIA显卡的硬编解码的一点心得 (完结) 1.硬解码软编码方法:大体流程,先用ffmpeg来读取视频文件的包,接着开启两个线程,一个用于硬解码,一个用于软编码,然后将读取的包传给解码器 ...
- 关于使用Exception的一点心得
毫无疑问,Exception有很多优点.查看任何一本面向对象的书籍,都会提到异常相对于返回值标记状态的不足以及避免错误导致程序崩溃的问题.看起来是很好的,用起来也是很好的.可是这么多年过去了,异常用的 ...
- SVM一点心得体会
支持向量机的学习说是刚刚开始,又不合理,只能说隔了很长的时间再看,终于在分类这块的层面上有了新的认识. 总的来说,支持向量机分为线性支持向量机和非线性支持向量机,线性支持向量机又可以分为硬间隔最大化线 ...
- 记录自己对EventLoop和性能问题处理的一点心得
1.EventLoop 这里说的EventLoop不是指某一个具体的库或是框架,而是指一种程序实现结构.这种结构多是基于IO多路转接的API(select.poll.epoll之类)以reactor模 ...
- 从Eclipse转移到IntelliJ IDEA一点心得
http://www.ituring.com.cn/article/37792 本人使用IntelliJ IDEA其实并不太久,用了这段时间以后,觉得的确很是好用.刚刚从Eclipse转过来的很多人开 ...
- Android平板上开发应用的一点心得——精确适配不同的dpi和屏幕尺寸
一.引言 Android的开源使厂商无需自行研发OS,大大降低了研发.生产的成本,使得Android平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...
随机推荐
- ASP.NET 知识点总结(六)
1.传入某个属性的set方法的隐含参数的名称是什么?value,它的类型和属性所声名的类型相同. 2.如何在C#中实现继承? 在类名后加上一个冒号,再加上基类的名称.3.C#支持多重继承么? 类之间不 ...
- IIS 相关配置
IIS 和 VS 安装顺序 正常情况是先装IIS,后装VS:这样就不会发生错误了,因为asp.net就可以注册写入到IIS中.如果先装VS,再装IIS,这样就会导致"访问IIS元数据库失败& ...
- SQL数据库,增加查询修改以及防sql写入攻击
SQL添加信息 SQL查询信息 SQL修改信息 SQL语句写入攻击: 普通语句添加信息 sql写入语句攻击: 解决方法:分开传送语句与参数关键:@
- LN : leetcode 406 Queue Reconstruction by Height
lc 406 Queue Reconstruction by Height 406 Queue Reconstruction by Height Suppose you have a random l ...
- Set,Map与Array,Object对比
Map与Array 数据结构横向对比,用Map和Array分别实现最基本的增删改查: //增 { let theMap=new Map(); let theArray=[]; theMap.set(' ...
- AMH V4.5 – 基于AMH4.2的第三方开发版
AMH V4.5[基于AMH4.2第三方开发版]重新部署了一次安装脚本,修改一系列BUG,已完美支持CENTOS7,树莓派,Fedora,Aliyun,Amazon,debian,Ubuntu,Ras ...
- Win7访问不了WINXP共享文件
用win xp的机器可以访问,但用win 7的机器无法访问共享文件 提示:您没有权限访问.请与网络管理员联系请求访问权限 网上找了相应的资料 做了如下动作 1. 打开网上邻居→本地连接→属性里,“看是 ...
- node遍历给定目录下特定文件,内容合并到一个文件
遍历目录用了fs.readdir这个异步方法,得到当前目录下所有的文件和目录的一个数组.然后判断: if文件,并且后缀符合设定的规则(本文例子是符合后缀ts,js)直接用同步方法写入, if目录,继续 ...
- Java真实笔试题一
PS:昨天去笔试后,发现自己对于JavaSE的基础部分还是有些薄弱的地方,特将昨天自己不是太清楚的地方记录下来,巩固基础. 子类继承父类静态方法的问题 public class Study { pub ...
- JAVA基础——Native关键字
一:native声明 在Java中native是关键字.它一般在本地声明,异地用C和C++来实现.它的声明有几点要注意: 1)native与访问控制符前后的关系不受限制. 2)必须在返回类型之前. 3 ...