欢迎访问宙启技术站
智能推送

Python中利用run()函数并发执行任务的技巧

发布时间:2023-12-17 13:07:57

在Python中,并发执行任务可以使用多线程或多进程来进行。其中,使用run()函数可以方便地执行并发任务。下面将介绍如何使用run()函数并发执行任务,并以一个简单的例子进行演示。

在Python中,可以使用concurrent.futures模块来实现并发执行任务。这个模块提供了ThreadPoolExecutorProcessPoolExecutor两个类,分别用于创建线程池和进程池。这两个类都提供了submit()方法,用于提交任务并返回一个Future对象,Future对象可以用于获取任务的结果。在提供了Future对象后,可以通过调用其result()方法来获取任务的结果。

run()函数位于concurrent.futures模块中,它是一个方便的函数,可以用于执行并发任务。run()函数接收一个可调用对象(也就是任务)作为参数,并用线程或进程池来执行这个任务。在执行任务时,run()函数将返回一个concurrent.futures.Future对象,其中包含了任务的执行结果。

下面以一个简单的例子来演示如何使用run()函数并发执行任务。

import concurrent.futures
import time

# 定义一个简单的任务函数,只是打印一些信息,并暂停一段时间
def task(name):
    print(f'Task {name} started')
    time.sleep(2)
    print(f'Task {name} finished')

# 使用run()函数并发执行任务
def main():
    # 创建线程池,最大线程数为5
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        # 提交5个任务
        futures = [executor.submit(task, i) for i in range(5)]
        
        # 等待所有任务完成,并输出结果
        for future in concurrent.futures.as_completed(futures):
            result = future.result()
            print(result)

if __name__ == '__main__':
    main()

在上面的代码中,我们定义了一个task()函数,这个函数接收一个参数name,打印一些信息之后暂停2秒钟。然后,我们使用run()函数并发执行了5个任务。

main()函数中,我们创建一个线程池ThreadPoolExecutor,设定最大线程数为5。然后,我们使用executor.submit()方法提交了5个任务,每个任务调用了task()函数。executor.submit()方法返回了一个Future对象,我们将这些对象保存在futures列表中。

接下来,我们使用concurrent.futures.as_completed()方法来获取任务的结果。as_completed()方法接收一个可迭代对象,并返回一个迭代器,在这个迭代器上可以获取已完成的任务的结果。在循环中,我们使用future.result()方法获取任务的结果,并将结果打印出来。

执行这段代码,我们可以看到输出结果类似如下:

Task 0 started
Task 1 started
Task 2 started
Task 3 started
Task 4 started
Task 1 finished
Task 3 finished
Task 4 finished
Task 2 finished
Task 0 finished

从输出结果可以看到,5个任务被并发地执行,并且每个任务暂停了2秒钟。