python多进程控制gui界面_python多进程管理DEMO

该博客展示了如何使用Python的multiprocessing库来创建和管理多进程,包括信号处理、工作进程的创建与替换,以及主进程对子进程的监控。通过一个Worker类实现了工作进程的主循环,并在接收到特定信号时优雅地退出。
摘要由CSDN通过智能技术生成

#-*- coding: utf-8 -*-

'''Created on 2012-10-14 19:50

@summary: multiprocessing coordinate demo

@author: JerryKwan'''

from multiprocessing importEvent, Processimportsignalimporttime

SUBPROCESSES=[]

WORKERS=[]

EXIT=Event()defexit_handler(signum, frame):print "signal handler called with signal", signum, " ", WORKERS, " ", frame

EXIT.set()

time.sleep(1)for w inWORKERS:print "begin to invoke stop_main_loop"w.stop_main_loop()

signal.signal(signal.SIGTERM, exit_handler)

signal.signal(signal.SIGINT, exit_handler)classWorker(object):"""docstring for Worker"""

def __init__(self, arg = "default arg"):

super(Worker, self).__init__()

self.arg=arg

self.be_exit=Event()

self.be_exit.clear()defstop_main_loop(self):print "stop_main_loop invoked"self.be_exit.set()defmain_loop(self):print "main_loop invoked"

while notself.be_exit.is_set():print "do something"

try:

time.sleep(1)exceptException, e:print "exception occured,", eprint "exit from main_loop"

defdo_work(worker):print "do_work invoked"worker.main_loop()defcreate_subprocess():'''@summary: create subprocess

@return: (worker, process)'''w=Worker()

p= Process(target = do_work, args =(w,))

p.daemon=Truereturn(w, p)defmain():

process_num= 2

for i inxrange(process_num):

w, p=create_subprocess()

WORKERS.append(w)

SUBPROCESSES.append(p)#signal.signal(signal.SIGTERM, exit_handler)

#signal.signal(signal.SIGINT, exit_handler)

#start

for p inSUBPROCESSES:

p.start()#for p in SUBPROCESSES:

#p.join()

print "monitor subprocess"

while notEXIT.is_set():for i inxrange(len(SUBPROCESSES)):

p=SUBPROCESSES[i]if notp.is_alive():#create new process to replace the dead one

print "%d process is dead, so i will create a new one to relace it." %i

w, p=create_subprocess()

WORKERS[i]=w

SUBPROCESSES[i]=p

p.start()

time.sleep(1)print "main process exit"

#wait subprocess exit

#for i in xrange(process_num):

#while

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值