python 进程编程速成
python具有thread多线程库,但多线程并不是真正的多线程,不能充分利用多核CPU资源。
在大多数情况下,python可以使用multiprocessing多进程库,可以轻松完成从单进程到并发执行的转换。
multiprocessing库支持子进程、通信和共享数据、执行不同形式的同步,提供Process、Queue、Pipe、Lock等类对象。
一、Process类对象,创建进程
在multiprocessing中,每一个进程都用一个Process类来表示。
Process([group [, target [, name [, args [, kwargs]]]]]) 参数: group分组,实际上不使用 target表示调用对象,你可以传入方法的名字 name是别名,相当于给这个进程取一个名字 args表示被调用对象的位置参数元组,比如target是函数a,他有两个参数m,n,那么args就传入(m, n)即可 kwargs表示调用对象的字典
示例1:
import multiprocessing def process(num): print 'Process:', num if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=process, args=(i,)) p.start()
备注:
multiprocessing.Process():创建进程
target:传入函数名(方法)
args:传入函数或方法的位置参数元组
P.start()方法用于启动进程
示例2:
import multiprocessing import time def process(num): time.sleep(num) print 'Process:', num if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=process, args=(i,)) p.start() print('CPU number:' + str(multiprocessing.cpu_count())) for p in multiprocessing.active_children(): print('Child process name: ' + p.name + ' id: ' + str(p.pid)) print('Process Ended')
备注:
m.cpu_count():获取当前机器的CPU核心数量
m.active_children():目前所运行的进程对象列表