多进程: 各个进程有自己独立的内存空间
import os
pid = os.fork()
if pid < 0:
print("failed")
elif pid == 0:
print("child")
else:
print("father child is %d"%pid)
使用muiltiprocessing模块儿 创建进程 Process类代表一个进程对象
from muiltprocessing import Process
import os
def run_proc(name)
print("child start")
print("father")
p = Process(target=run_proc, atgs=('test',))
print("child wild start")
p.start()
p.join()
print("child end")
Process类常用方法
is_alive 是否还在执行
join 是否等待执行结束
start 启动
run() 如果没有给定target参数 对象调用start就将执行对象中的run方法
terminate 不管任务是否完成立即终止
Process常用属性
name 当前实例别名 默认为Process-N
pid 当前进程实例的PID值
子类化Process
1 from multiprocessing import Process
2 import os
3 import time
4
5 class MyProcess(Process):
6 def __init__(self, interval):
7 super().__init__()
8 self.interval = interval
9 def run(self):
10 print("child")
11 startTime = time.time()
12 time.sleep(self.interval)
13 stopTime = time.time()
14 print("id:%d father:%d, cost:%d"%(os.getpid(), os.getppid(), stopTime-startTime))
15 print("father")
16 startTime = time.time()
17 p = MyProcess(1)
18 p.start();
19 p.join()
20 stopTime = time.time()
21 print("end cost:%d"%(stopTime-startTime))
进程池
当创建的紫禁城不多时可以利用Process动态生成多个进程,但是上百上千个目标 手动创建需要很大的工作量
此时可以利用进程池创建
1 from multiprocessing import Pool
2 import time
3 import os
4
5 def worker(msg):
6 print("id:%d"%os.getpid())
7 startTime = time.time()
8 time.sleep(2)
9 stopTime = time.time()
10 print("msg:%s, cost:%d"%(msg, stopTime-startTime))
11 pool = Pool(3)
12 for x in range(10):
13 pool.apply_async(worker, (x,))
14
15 pool.close()
16 pool.join()
消息队列
Manager().Queue() 用于进程共享数据