Python - 使用不同的参数并行运行相同的函数
在本文中,我们将学习如何使用不同的参数并行运行相同的函数。我们可以使用并行处理以不同的参数并行运行相同的函数。
通过并行处理可以增加程序执行的任务数量,从而减少总处理时间。这些有助于解决大规模问题。使用标准的多处理模块,通过创建子进程,我们可以有效地并行化简单的任务。该模块提供了一个易于使用的界面,并包括一组任务提交和同步处理实用程序。
方法:
- 我们可以通过继承多处理进程来构建一个独立运行的进程。我们可以通过扩展__init_方法来初始化资源,也可以通过实现Process.run()方法来编写子进程的代码。我们在下面的代码中看到如何构造一个进程,它打印分配的 id。
- 我们需要初始化我们的进程对象并调用 Process.start() 方法以生成进程。在这里,Process.start() 将创建一个新进程并调用一个名为 Process.run() 的方法。
- p.start() 之后的代码在进程 p 完成任务之前立即执行。您可以使用 Process.join 等待任务完成()。
让我们通过一些例子来理解这一点。
示例 1:
Python3
import multiprocessing
import time
# Process class
class Process(multiprocessing.Process):
def __init__(self, id):
super(Process, self).__init__()
self.id = id
def run(self):
time.sleep(1)
print("I'm the process with id: {}".format(self.id))
if __name__ == '__main__':
p = Process(0)
# Create a new process and invoke the
# Process.run() method
p.start()
# Process.join() to wait for task completion.
p.join()
p = Process(1)
p.start()
p.join()
Python3
import multiprocessing
import time
# square function
def square(x):
return x * x
if __name__ == '__main__':
# multiprocessing pool object
pool = multiprocessing.Pool()
# pool object with number of element
pool = multiprocessing.Pool(processes=4)
# input list
inputs = [0, 1, 2, 3, 4]
# map the function to the list and pass
# function and input list as arguments
outputs = pool.map(square, inputs)
# Print input list
print("Input: {}".format(inputs))
# Print output list
print("Output: {}".format(outputs))
Python3
from multiprocessing import Pool
def print_range(range):
# print range
print('From {} to {}:'.format(range[0], range[1]))
def run_parallel():
# list of ranges
list_ranges = [[0, 10], [10, 20], [20, 30]]
# pool object with number of elements in the list
pool = Pool(processes=len(list_ranges))
# map the function to the list and pass
# function and list_ranges as arguments
pool.map(print_range, list_ranges)
# Driver code
if __name__ == '__main__':
run_parallel()
输出:
我们还可以使用 Pool 类以不同的参数并行运行相同的函数。对于并行映射,我们必须首先初始化 multiprocessing.Pool() 对象。第一个参数是工人的数量;如果没有给出,该数字将等于系统中的元素数量。
示例 2:
举个例子吧。在这个例子中,我们将看到如何传递一个计算数字平方的函数。使用 Pool.map() 我们可以将函数映射到列表并将函数和输入列表作为参数传递,如下所示:
蟒蛇3
import multiprocessing
import time
# square function
def square(x):
return x * x
if __name__ == '__main__':
# multiprocessing pool object
pool = multiprocessing.Pool()
# pool object with number of element
pool = multiprocessing.Pool(processes=4)
# input list
inputs = [0, 1, 2, 3, 4]
# map the function to the list and pass
# function and input list as arguments
outputs = pool.map(square, inputs)
# Print input list
print("Input: {}".format(inputs))
# Print output list
print("Output: {}".format(outputs))
输出:
示例 3:
蟒蛇3
from multiprocessing import Pool
def print_range(range):
# print range
print('From {} to {}:'.format(range[0], range[1]))
def run_parallel():
# list of ranges
list_ranges = [[0, 10], [10, 20], [20, 30]]
# pool object with number of elements in the list
pool = Pool(processes=len(list_ranges))
# map the function to the list and pass
# function and list_ranges as arguments
pool.map(print_range, list_ranges)
# Driver code
if __name__ == '__main__':
run_parallel()
输出: