zeroMQ初体验-7.优雅的卸载工作进程
2011-10-10 15:23
141 查看
关掉一个进程有很多种方式,而在ZeroMQ中则推崇通过使用信号通知,可控的卸载、关闭进程。在这里,要援引之前的"分而治之"例子(具体可以见这里)。
例图:
显然,信号发送是由能够掌握整个进度的"水槽"(下游)来控制,在原有基础上做少许变更即可。
Worker(数据处理):
Python代码
水槽(下游):
Python代码
注意:
正常情况下,即使进程被关闭,可能端口并没有被清除(那是有ZeroMQ维护的),原文中调用了这么两句
zmq_close (server)
zmq_term (context)
python中对应为zmq.close(),zmq.term(),不过python的垃圾回收会替俺们解决后顾之忧的~
例图:
显然,信号发送是由能够掌握整个进度的"水槽"(下游)来控制,在原有基础上做少许变更即可。
Worker(数据处理):
Python代码
import sys import time import zmq context = zmq.Context() receiver = context.socket(zmq.PULL) receiver.connect("tcp://localhost:5557") sender = context.socket(zmq.PUSH) sender.connect("tcp://localhost:5558") controller = context.socket(zmq.SUB) controller.connect("tcp://localhost:5559") controller.setsockopt(zmq.SUBSCRIBE, "") poller = zmq.Poller() poller.register(receiver, zmq.POLLIN) poller.register(controller, zmq.POLLIN) while True: socks = dict(poller.poll()) if socks.get(receiver) == zmq.POLLIN: message = receiver.recv() workload = int(message) # Workload in msecs time.sleep(workload / 1000.0) sender.send(message) sys.stdout.write(".") sys.stdout.flush() if socks.get(controller) == zmq.POLLIN: break
水槽(下游):
Python代码
import sys import time import zmq context = zmq.Context() receiver = context.socket(zmq.PULL) receiver.bind("tcp://*:5558") controller = context.socket(zmq.PUB) controller.bind("tcp://*:5559") receiver.recv() tstart = time.time() for task_nbr in xrange(100): receiver.recv() if task_nbr % 10 == 0: sys.stdout.write(":") else: sys.stdout.write(".") sys.stdout.flush() tend = time.time() tdiff = tend - tstart total_msec = tdiff * 1000 print "Total elapsed time: %d msec" % total_msec controller.send("KILL") time.sleep(1)
注意:
正常情况下,即使进程被关闭,可能端口并没有被清除(那是有ZeroMQ维护的),原文中调用了这么两句
zmq_close (server)
zmq_term (context)
python中对应为zmq.close(),zmq.term(),不过python的垃圾回收会替俺们解决后顾之忧的~
相关文章推荐
- zeroMQ初体验-9.优雅的扩展(代理模式)
- zeroMQ初体验-10.优雅的使用多线程
- 【时间管理】横向管理工作进程
- nginx中父子进程工作的主体函数
- IIS6.0应用程序池回收和工作进程
- 2014-04-30工作日志:提取文件的路径及使用createprocess时,要用getmodulename获取要执行的模块的路径及调用createprocess时要记得关闭新建的进程
- 配置win2003 server IIS的总结,为什么IIs的工作进程会在空闲时间释放的问题。同时学会了throw的真正含义,throw的真正含义就是导致程序停止,崩溃,很简单,网摘也有记录。
- IIS6.0应用程序池回收和工作进程
- 雨林木风Win10出现"Windows任务的主机进程已停止工作"怎么办?
- nginx是以多进程的方式来工作的
- 工作进程未能初始化 http.sys 通信或 w3svc 通信层,因此无法被启动。数据域包含错误号。
- IIS6.0应用程序池回收和工作进程【转】
- Linux进程资源管理第二篇 -------- 工作及资源管理
- nginx中父子进程工作的主体函数
- zeroMQ初体验-2.发布订阅模式(pub/sub)
- zeroMQ初体验-21.应答模式进阶(七)-云计算
- Android中init进程的工作
- Android获取应用信息判断网络连接返回桌面及卸载apk结束进程等的实现思路
- 工作总结4 卸载软件注意的问题
- 贸易进出口管理-工作进程管理