- 浏览: 383876 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
lhbthanks:
楼主写的很多,也很实用,要是再增加一些描述就会更好了。
oracle 用户 从一个表空间 另一个表空间 -
wuhuajun:
private int _connectionMax = 51 ...
resin jboss 最大连接数设置 -
shixiaomu:
自己丁丁丁一下 学了忘忘了再学。。主要是应用场景太少
python -
shixiaomu:
我自己有了方案了java+rabbitmq_server-2. ...
hadoop hive zookeeper 还不够 -
shixiaomu:
看到这个帖子 羞愧极了 ,原来 我 09 年就想学 pytho ...
python
java+python+robbitMQ+subprocess+threading
典型的客户端+mq+服务端架构...
import pika
import subprocess
import time
import traceback
import threading
import datetime
import signal
import os
import string
class ThreadClass(threading.Thread):
def __init__(self, body, rpid, timeout=10):
threading.Thread.__init__(self)
self.body = body
self.channel = mqConUtil().channel
self.rpid = rpid
self.timeout = int(timeout)
def send_signal(self, sig):
"""Send a signal to the process
"""
os.kill(self.pid, sig)
def terminate(self):
"""Terminate the process with SIGTERM
"""
self.send_signal(signal.SIGTERM)
def kill(self):
"""Kill the process with SIGKILL
"""
self.send_signal(signal.SIGKILL)
def wait(self):
""" wait child exit signal,
"""
self.Popen.wait()
def free_child(self):
"""
kill process by pid
"""
try:
self.Popen.terminate()
self.Popen.kill()
self.terminate()
self.kill()
self.wait()
except:
pass
def run(self):
start = time.time()
self.start_time = start
now = datetime.datetime.now()
ftime2 = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print "%s says Hello World at time: %s" % (self.getName(), now)
start = time.time()
status = -11
output = "defOutputERROR"
pid = 0
try:
self.Popen = subprocess.Popen(split_cmd(self.body), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
self.pid = self.Popen.pid
while self.Popen.poll() == None and (time.time() - self.start_time) < self.timeout :
time.sleep(1)
#p.wait()
if self.Popen.poll() == None: # child is not exit yet!
self.free_child()
self.returncode = -9999
status = self.returncode
else:
self.returncode = self.Popen.poll()
output = self.Popen.stdout.read()
output += self.Popen.stderr.read()
status = self.Popen.poll()
pid = self.pid
except Exception, e:
print(e)
print(traceback.format_exc())
print(self.rpid, pid, str(time.time() - start), now, output, status, self.body)
self.channel.basic_publish(exchange='', routing_key='hello2', body=str(self.rpid) + "|" + str(pid) + "|" + str(time.time() - start) + "|" + ftime2 + "|" + output.replace("\n", "") + "|" + str(status) + "|" + self.body)
def createChannel():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
return connection.channel()
def split_cmd(s):
"""
str --> [], for subprocess.Popen()
"""
SC = '"'
a = s.split(' ')
cl = []
i = 0
while i < len(a) :
if a[i] == '' :
i += 1
continue
if a[i][0] == SC :
n = i
loop = True
while loop:
if a[i] == '' :
i += 1
continue
if a[i][-1] == SC :
loop = False
m = i
i += 1
#print a[n:m+1]
#print ' '.join(a[n:m+1])[1:-1]
cl.append((' '.join(a[n:m + 1]))[1:-1])
else:
cl.append(a[i])
i += 1
return cl
def callback(ch, method, properties, body):
print " [x] Received %r" % (body)
try:
rpid, subbody = string.split(body, "#")
t = ThreadClass(subbody, rpid)
t.start()
except Exception, e:
print("error".join(str(subprocess.errno)))
print(e)
print(traceback.format_exc())
# (status, output) = commands.getstatusoutput(body)
def setup():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
channel = connection.channel()
channel.basic_consume(callback, queue='hello', no_ack=True)
#channel.basic_qos(prefetch_count=1)
#channel.queue_declare(queue='hello')
channel.start_consuming()
def singleton(cls):
instances = {}
def get_instance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return get_instance
@singleton
class mqConUtil:
def __init__(self):
self.channel = createChannel()
if __name__ == '__main__':
while True:
try:
setup()
except Exception, e:
print("error".join(str(subprocess.errno)))
print(e)
print(traceback.format_exc())
#for i in range(1, 1):
# connection.process_data_events();
print ' Waiting for messages. To exit press CTRL+C-done'
典型的客户端+mq+服务端架构...
import pika
import subprocess
import time
import traceback
import threading
import datetime
import signal
import os
import string
class ThreadClass(threading.Thread):
def __init__(self, body, rpid, timeout=10):
threading.Thread.__init__(self)
self.body = body
self.channel = mqConUtil().channel
self.rpid = rpid
self.timeout = int(timeout)
def send_signal(self, sig):
"""Send a signal to the process
"""
os.kill(self.pid, sig)
def terminate(self):
"""Terminate the process with SIGTERM
"""
self.send_signal(signal.SIGTERM)
def kill(self):
"""Kill the process with SIGKILL
"""
self.send_signal(signal.SIGKILL)
def wait(self):
""" wait child exit signal,
"""
self.Popen.wait()
def free_child(self):
"""
kill process by pid
"""
try:
self.Popen.terminate()
self.Popen.kill()
self.terminate()
self.kill()
self.wait()
except:
pass
def run(self):
start = time.time()
self.start_time = start
now = datetime.datetime.now()
ftime2 = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))
print "%s says Hello World at time: %s" % (self.getName(), now)
start = time.time()
status = -11
output = "defOutputERROR"
pid = 0
try:
self.Popen = subprocess.Popen(split_cmd(self.body), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
self.pid = self.Popen.pid
while self.Popen.poll() == None and (time.time() - self.start_time) < self.timeout :
time.sleep(1)
#p.wait()
if self.Popen.poll() == None: # child is not exit yet!
self.free_child()
self.returncode = -9999
status = self.returncode
else:
self.returncode = self.Popen.poll()
output = self.Popen.stdout.read()
output += self.Popen.stderr.read()
status = self.Popen.poll()
pid = self.pid
except Exception, e:
print(e)
print(traceback.format_exc())
print(self.rpid, pid, str(time.time() - start), now, output, status, self.body)
self.channel.basic_publish(exchange='', routing_key='hello2', body=str(self.rpid) + "|" + str(pid) + "|" + str(time.time() - start) + "|" + ftime2 + "|" + output.replace("\n", "") + "|" + str(status) + "|" + self.body)
def createChannel():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
return connection.channel()
def split_cmd(s):
"""
str --> [], for subprocess.Popen()
"""
SC = '"'
a = s.split(' ')
cl = []
i = 0
while i < len(a) :
if a[i] == '' :
i += 1
continue
if a[i][0] == SC :
n = i
loop = True
while loop:
if a[i] == '' :
i += 1
continue
if a[i][-1] == SC :
loop = False
m = i
i += 1
#print a[n:m+1]
#print ' '.join(a[n:m+1])[1:-1]
cl.append((' '.join(a[n:m + 1]))[1:-1])
else:
cl.append(a[i])
i += 1
return cl
def callback(ch, method, properties, body):
print " [x] Received %r" % (body)
try:
rpid, subbody = string.split(body, "#")
t = ThreadClass(subbody, rpid)
t.start()
except Exception, e:
print("error".join(str(subprocess.errno)))
print(e)
print(traceback.format_exc())
# (status, output) = commands.getstatusoutput(body)
def setup():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='10.13.27.215', port=56729))
channel = connection.channel()
channel.basic_consume(callback, queue='hello', no_ack=True)
#channel.basic_qos(prefetch_count=1)
#channel.queue_declare(queue='hello')
channel.start_consuming()
def singleton(cls):
instances = {}
def get_instance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return get_instance
@singleton
class mqConUtil:
def __init__(self):
self.channel = createChannel()
if __name__ == '__main__':
while True:
try:
setup()
except Exception, e:
print("error".join(str(subprocess.errno)))
print(e)
print(traceback.format_exc())
#for i in range(1, 1):
# connection.process_data_events();
print '
发表评论
-
左右鞋的java多线程,哪位大师帮忙优化一下?
2015-11-30 16:21 48322个线程 1个打包 1个指挥 20个负责生产左右鞋. ... -
Java内部类的使用小结
2014-05-30 10:00 868内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相 ... -
一种高效无锁内存队列的实现
2013-02-05 18:21 5355Disruptor是LMAX公司开源的一个高效的内存无锁队列 ... -
java io nio 区别和联系.
2013-02-05 18:08 4270IO ... -
IntelliJ
2012-11-19 16:07 818使用了一段时间的Intelli ... -
利用 org.apache.commons.io.FileUtils快速读写文件(转)
2012-11-07 12:25 2935利用 org.apache.commons.io.FileUt ... -
google 集合类 -loadcache-弱引用
2012-10-31 17:45 907google 集合类 l ... -
Shuffle-我能找到的最详细的文档-(转)
2012-09-11 16:02 903MapReduce:详解Shuffle过程 ... -
hadoop-map-reduce执行流程调研报告
2012-08-23 17:02 1232hadoop-map-reduce执行流程调研报告 参与者: ... -
hadoop hive zookeeper 还不够
2012-07-24 18:03 1365hadoop hive zookeeper 还不够 好久不 ... -
java try catchfinaly throws throw return 关系 终于搞明白了.
2012-02-24 01:40 3611package com.easou.cas06proxytes ... -
java-exception in thread “main”java.lang.NoSuchMethodError。
2011-07-15 09:37 991可能出现的情况是:有两个包-一个包里面有类,另一个包里面有部分 ... -
mina的深入学习-未完待续
2011-03-21 22:25 1095想要看懂mina的源代码,需要做一些知识储备. 我大体列一下: ... -
java 多线程 心得 体会
2011-03-03 10:12 1265点解 java 多线程.. 先 ... -
java 多线程模型--Future-原理及初步实现
2011-02-28 16:54 2951整理1: 什么是Future? ... -
java jar包大全.
2011-02-22 10:31 1233maven的另类用法. http://repo1.maven. ... -
程序员的路.....
2011-02-18 11:13 1634关于工作:关于挣钱:关于发展. 我的一些感悟: ... -
linux - resin 至强 参数配置
2011-02-12 10:02 1531/usr/local/vstore/jdk1.6.0_12/b ... -
resin jboss 最大连接数设置
2011-01-04 17:29 4293在近日的测试中发现,无论resin.conf中配置的并发连接数 ... -
名称解释+线路图
2010-12-13 16:58 949jmx --------------------------- ...
相关推荐
云计算促进了运维模式的集中化、服务化、自动化和远程化;物联网实现了设备资源管控的自动化和智能化;移动互联和社交工具改变了运维工作的方式,提高了运维工作的效率和质量。 在介绍完技术趋势之后,文档对信息...
- **从依赖员工技能到运维一体化**:随着自动化和智能化技术的应用,IT运维正朝着更加规范和自动化的方向发展。 - **服务导向运维**:强调以服务为中心的运维理念,确保资源和服务的合理提供、监管和调度。 通过...
信息部门的组织结构和运维流程也在不断调整,以适应多活、混合云环境的需求,逐步实现运维的标准化、自动化和智能化。 IT服务管理(ITSS)框架为混合云数据中心的运营管理提供了指导。这个框架基于ITIL的理念,同时...
总结来说,在新技术背景下,运维管理平台需要适应这些变化,提升自动化和智能化水平,通过统一的管理框架和大数据分析来优化资源分配和服务质量,同时利用物联网技术加强设备监控和预防性维护,以确保IT系统的稳定...
3. **主动阶段**:随着技术的发展,安全运维服务建立了更为严格的安全运行定义,并将系统性能、问题管理、可用性管理、自动化与工作调度作为重点关注领域。 4. **服务阶段**:在此阶段,运维服务能够支持任务计划和...
3. 在主动阶段:运维服务建立了安全运行的定义,并将系统性能、问题管理、可用性管理、自动化与工作调度作为重点; 4. 在服务阶段,运维服务工作中已经可以支持任务计划和服务级别管理; 5. 在价值阶段,运维服务...
再者,信息化技术与电气自动化相结合,形成了智能制造的雏形。通过物联网、大数据分析和人工智能等先进技术,钢铁企业可以实时获取生产数据,进行深入分析,预测设备故障,优化生产计划。这种智能化转型不仅可以降低...
但是,随着业务的增长,BOSS 系统面临着产品订单库存自动化、统计分析和确认管理等问题。 2. 第二个阶段:NGBOSS 的雏形 在这个阶段,NGBOSS 系统诞生,它基于新的旅游业务架构,引入了资源化和灵活性的概念。...
它支持多种资源类型,包括IP地址、磁盘卷、文件系统和应用服务,能够自动检测并响应硬件或软件故障。 ##### 2.2 双机配置实践 双机配置涉及两个独立的节点,通过共享存储和网络连接协同工作。配置步骤包括但不限于...
5. 运维自动化:人工智能可以自动完成网络监控、故障检测和修复等运维任务,提高网络维护的效率。 6. 数据管理:人工智能技术可以用于高效地存储和检索大量数据,通过模式识别和数据挖掘技术,发现数据之间的关联和...
- **重要特点**:电商平台具有总体设计思路清晰、在线客服系统完善、业务流程自动化程度高、集成多种系统(如财务、生产、供应链)等特点,确保了业务的高效运作。 - **运维服务**:提供驻场开发、应急运维等即时...
- **楼宇智能控制机房**:用于楼宇自动化系统的监控和管理。 - **保安监控机房**:负责视频监控和防盗报警。 - **消防控制室**:作为火灾报警和联动控制的中心。 - **卫星接收机房**:用于接收卫星信号。 - **视频...
3. 自动负载分配:根据用户需求和系统负载状况自动调整资源分配,提高资源利用率和响应速度。 4. 成本公式:用于计算云计算平台各项服务的成本,包括资源成本、运维成本等,是评估成本效用的基础。 5. 成本效用函数...
使用持续集成/持续部署(CI/CD)工具如Jenkins或GitLab CI/CD可以自动化部署流程,减少人为错误。 最后是运维阶段,也称为维护期。在这个阶段,软件需要定期更新以适应变化的需求,修复可能出现的问题,或者优化...