📜  Python - 使用不同的参数并行运行相同的函数

📅  最后修改于: 2022-05-13 01:55:39.523000             🧑  作者: Mango

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()

输出: