创建一个简单的多进程任务只需要5步:
1.创建任务的函数,准备多线程调用
2.创建进程池,并指定进程池中线程的个数
3. 进程池调用步骤1创建的函数,开启进程运行任务
4.关闭进程池 pool.close()
5.判断是否需要等待所有进程结束再运行主函数pool.join()
# coding=utf-8
from multiprocessing import Process, Pool
import os, sys, logging
from datetime import datetime
def worker(name):
print "worker, runing" + name + ": " + str(datetime.now())
a = [1,2,3]
sleep(2)
print "find_same_city, stop" + name + ": " + str(datetime.now())
return len(a)
if __name__ == "__main__":
pool = Pool(processes=5) # 创建有5个进程的进程池
processes1 = []
for i in range(10): # 将10个任务放入进程池执行
name = "进程%d:"%i
processes1.append(pool.apply_async(worker, (name))
pool.close() # 关闭进程池,不可再往进程池放任务
pool.join() # join 线程池,目的是等待进程池中所有进程运行完再执行主程序
for res in processes1:
result = res.get() # 对队列中的进程获取返回值,即worker的return
print result
print "all over"
多进程有个坑就是如果返回值太大,任务在join之后会浪费很多时间(任务需要将各个进程的返回值copy一份)。因此如果需要同步的数据太大,应尽量避免使用该方式同步。