关于使用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平板品牌如雨后春笋般爆发,山寨机厂商们似乎又找到了一丝希望.与此同时带来的是广大开发者的苦不堪言,各 ...
随机推荐
- c++病毒函数
FreeConsole(); 屏蔽输出. BlockInput(); 阻止键盘和鼠标的工作. 所需头文件: #include <windows.h> #include <Winabl ...
- POJ 2773 欧几里得
思路: 若a和b互素的话,则b*t+a和b一定互素 用周期性做就好了 //By SiriusRen #include <cstdio> using namespace std; ],m,k ...
- 洛谷 P3437 [POI2006]TET-Tetris 3D
二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...
- Java泛型Object和?区别
在写spark streamming读取kafka latest offset的时候,有一下语句: Map<TopicAndPartition, Object> latestOffsets ...
- selenium-server 启动命令
启动hub主机: java -jar selenium-server-standalone-2.39.0.jar -role hub 启动node 本地:java -jar selenium-serv ...
- [转]position:fixed; 在IE9下无效果的问题
本文转自:http://www.cnblogs.com/xinwang/archive/2013/04/06/3002384.html 平常DIV+CSS布局时,position属性一般用absoul ...
- FormsAuthentication权限管理
通常我们在做访问权限管理的时候会把用户正确登录后的基本信息保存在Session中然后用户每次请求页面或接口数据的时候代上会话状态即能拿到Session中存储的基本信息Session的原理,也就是在服务 ...
- 盒子模型,top和margin-top
1. 标准盒子模型: width只是内容的宽度. 元素的总宽度=width + padding*2 +border*2 +margin*2. IE盒子模型: width=内容的宽度 + padding ...
- opencv3+python+pycharm报错问题(cmd命令正常)
2018-03-0223:58:59 首先在你已成功安装python的情况下运行cmd命令,下载安装opencv插件 如果在命令行可以使用 import cv2 但是在IDE上面只输入import c ...
- Android常见问题总结(二)
1.布局文件LinearLayout线性布局添加内容报错. 解决方法: 线性布局LinearLayout中包裹的元素多余1个需要添加android:orientation属性. 2.android 的 ...