一、进程
python中提供多进程包:multiprocessing,支持子进程,通信,共享内存,执行不同形式的同步,提供了Process、Pipi、Lock等组件
多进程和多线程区别:
多线程使用的是CPU的一个核,适合IO密集型
多进程使用的是CPU的多个核,适合运算密集型
1)multiprocessing的方法
cpu_count():统计cpu总数
active_children():获取所有子进程
例子:
#!/usr/bin/env python
import multiprocessing
p = multiprocessing.cpu_count()
m = multiprocessing.active_children()
print(p)
print(m)
运行结果:
8
[]
2)Process进程
创建一个Process对象:p = multiprocessing.Precess(target=worker,args=(2,))
说明:
target = 函数名字
args = 函数需要的的参数,以tuple形式传入
3)Process常用方法
is_alive():判断进程是否存活
run():启动进程
start():启动进程,会自动调用run方法,常用
join(timeout=):等待进程结束或者直到超时
4)Process常用属性
name:进程名字
pid:进程的pid
例子:
#!/usr/bin/env python
import time
import multiprocessing
def worker(interval):
time.sleep(interval)
print("hello,China")
if __name__ == "__main__":
p = multiprocessing.Process(target=worker,args=(5,))
p.start()
print(p.is_alive())
p.join(timeout=3) # 只等待3秒,如果进程还没结束,则向下执行print(p.name)
print(p.name)
print(p.pid)
print("This is end")
运行结果:
True
Process-1
121764
This is end
hello,China
实例:多进程
import time
import multiprocessing
def worker(name,interval):
print("{0} start" .format(name))
time.sleep(interval)
print("{0} end" .format(name))
if __name__ == "__main__":
print("main start")
print("The computer has {0} core" .format(multiprocessing.cpu_count()))
p1 = multiprocessing.Process(target=worker,args=("worker",2))
p2 = multiprocessing.Process(target=worker,args=("worker",3))
p3 = multiprocessing.Process(target=worker,args=("worker",4))
p1.start()
p2.start()
p3.start()
for p in multiprocessing.active_childre