Python 使用多进程池和任务

  • Post category:Python

当我们需要处理大量的数据并且需要并发处理时,使用多进程池来处理任务是一个不错的选择。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方法,该方法会同步执行任务,即只有当前的任务执行完后才会执行下一个任务。

总的来说,使用多进程池可以很好的提高程序的性能。但要注意的是,如若需要使用全局变量或共享变量,则需要通过特殊的方法进行处理以避免数据竞争问题。