当我们需要处理大量的数据并且需要并发处理时,使用多进程池来处理任务是一个不错的选择。Python中使用多进程池可以通过multiprocessing
模块完成。具体的操作步骤如下:
1.导入multiprocessing
模块
import multiprocessing
2.创建多进程池
pool = multiprocessing.Pool(processes=num)
其中num
为创建的子进程的数量,可以根据需要进行设定。
3.执行任务
使用apply_async
方法向进程池中添加任务,并异步执行任务。
results = []
for i in range(10):
result = pool.apply_async(func, args=(i,))
results.append(result)
其中func
为要执行的函数,args
为函数的参数,results
则保存了添加的任务,可以在之后的操作中使用。
4.关闭多进程池
所有的任务执行完成后,需要手动关闭进程池。
pool.close()
pool.join()
一个简单的示例代码如下:
import multiprocessing
import time
def func(num):
time.sleep(1)
return num * num
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = []
for i in range(10):
result = pool.apply_async(func, args=(i,))
results.append(result)
pool.close()
pool.join()
for result in results:
print(result.get())
上面的示例代码中,我们使用了多进程池来处理数据,创建了4个子进程,并将执行的任务添加进了进程池。最后打印执行完的结果。
在上面的示例代码中,异步添加任务到进程池中,使用的是apply_async
方法。如果要同步执行任务,需要使用apply
方法。
下面再给一个简单的示例代码说明同步执行任务的方式:
import multiprocessing
import time
def func(num):
time.sleep(1)
return num * num
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=4)
results = []
for i in range(10):
result = pool.apply(func, args=(i,))
results.append(result)
pool.close()
pool.join()
for result in results:
print(result)
上述示例代码中,我们调用的是apply
方法,该方法会同步执行任务,即只有当前的任务执行完后才会执行下一个任务。
总的来说,使用多进程池可以很好的提高程序的性能。但要注意的是,如若需要使用全局变量或共享变量,则需要通过特殊的方法进行处理以避免数据竞争问题。