标签:
multiprocessing 创建进程的类:Process([group [, target [, name [, args [, kwargs]]]]]),target表示调用对象,args表示调用对象的位置参数元组。kwargs表示调用对象的字典。name为别名。group实质上不使用。 方法:is_alive()、join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。 属性:authkey、daemon(要通过start()设置)、exitcode(进程在运行时为None、如果为–N,表示被信号N结束)、name、pid。其中daemon是父进程终止后自动终止,且自己不能产生新进程,必须在start()之前设置。 将进程定义为类 import multiprocessing import time class ClockProcess(multiprocessing.Process): def __init__(self, interval): multiprocessing.Process.__init__(self) self.interval = interval def run(self): n = 5 while n > 0: print("the time is {0}".format(time.ctime())) time.sleep(self.interval) n -= 1 if __name__ == ‘__main__‘: p = ClockProcess(3) p.start() print p.is_alive() 注:进程p调用start()时,自动调用run() p.daemon = True p.start() p.join() Lock 当多个进程需要访问共享资源的时候,Lock可以用来避免访问的冲突。 lock = multiprocessing.Lock() lock.acquire() lock.release() Semaphore Semaphore用来控制对共享资源的访问数量,例如池的最大连接数。 Event Event用来实现进程间同步通信。 Queue put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值) get方法有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常 q = multiprocessing.Queue() try: q.put(1, block = False) except: pass try: print q.get(block = False) except: pass Pipe Pipe方法返回(conn1, conn2)代表一个管道的两个端。Pipe方法有duplex参数,如果duplex参数为True(默认值),那么这个管道是全双工模式,也就是说conn1和conn2均可收发。duplex为False,conn1只负责接受消息,conn2只负责发送消息。 pipe = multiprocessing.Pipe() p1 = multiprocessing.Process(target=proc1, args=(pipe[0],)) p2 = multiprocessing.Process(target=proc2, args=(pipe[1],)) pipe.send(i) pipe.recv() Pool Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到规定最大值,那么该请求就会等待,直到池中有进程结束,才会创建新的进程来它。 pool = multiprocessing.Pool(processes = 3) for i in xrange(4): msg = "hello %d" %(i) pool.apply_async(func, (msg, )) apply_async(func[, args[, kwds[, callback]]]) 它是非阻塞,apply(func[, args[, kwds]])是阻塞的(理解区别,看例1例2结果区别) close() 关闭pool,使其不在接受新的任务。 terminate() 结束工作进程,不在处理未完成的任务。 join() 主进程阻塞,等待子进程的退出, join方法要在close或terminate之后使用。 参考:http://www.cnblogs.com/kaituorensheng/p/4445418.html
标签:
原文地址:http://www.cnblogs.com/lly-001/p/5762363.html