1. 一个多进程
# 引入多进程模块
import multiprocessing
# 引入时间模块
import time
# 放在子进程中执行的程序
def func(msg):
for i in range(3):
print(msg)
time.sleep(1)
if __name__ == "__main__":
# 创建一个子进程 要传递的参数放在args中
p = multiprocessing.Process(target=func, args=("hello", ))
# 启动子进程
p.start()
# 主进程阻塞,等待子进程结束
p.join()
print("done")
2. 进程池
from multiprocessing import Pool
def func(msg):
print(msg,'*** in func')
time.sleep(3)
if __name__ == "__main__":
# 创建进程池设置为5个进程
pool = Pool(processes=5)
for i in xrange(3):
print i
# 异步执行(相当于同时执行5个(并行),当然实例只添加了三个)
pool.apply_async(func, ("hello %d" %(i), ))
# 同步执行(一个一个的执行(串行))
#pool.apply(func, ("hello %d" %(i), ))
pool.close()
#pool.terminate() #结束工作进程,不在处理未完成的任务
pool.join() #主进程阻塞,等待子进程的退出, join方法要在close或terminate之后使用
print("done")
3. 获取执行结果
from multiprocessing import Pool
import time
def func(msg):
print("msg : ", msg)
time.sleep(3)
print "end"
return "multi_result : " + msg
if __name__ == "__main__":
pool = Pool(processes=4)
# 定义result列表存储执行结果
result = []
for i in xrange(3):
msg = "hello %d" %(i)
multi_result = pool.apply_async(func, (msg, ))
result.append(multi_result)
pool.close()
pool.join()
for res in result:
# 打印进程执行结果
print(res.get())
print("done")
4. 进程间内存共享
a.Array数组
#方法一,Array
from multiprocessing import Process,Array
temp = Array('i', [11,22,33,44])
def Foo(i):
temp[i] = 100+i
for item in temp:
print(i,'----->',item)
for i in range(2):
p = Process(target=Foo,args=(i,))
p.start()
'''
0 -----> 100
0 -----> 22
0 -----> 33
0 -----> 44
1 -----> 100
1 -----> 101
1 -----> 33
1 -----> 44
'''
b.Manager类
#方法二:manage.dict()共享数据
from multiprocessing import Process,Manager
manage = Manager()
dic = manage.dict()
def Foo(i):
dic[i] = 100+i
print(dic.values())
if __name__ == "__main__":
for i in range(2):
p = Process(target=Foo,args=(i,))
p.start()
p.join()
'''
[100]
[100, 101]
'''