在Python中,可以使用concurrent.futures
模块中的ThreadPoolExecutor
或ProcessPoolExecutor
类来实现函数的并发执行。这里分别给出两个例子,一个使用线程池,另一个使用进程池。
使用线程池(ThreadPoolExecutor
):
import concurrent.futures
import time
def my_function(x):
print(f"Starting function {x}")
time.sleep(2) # 模拟耗时操作
print(f"Finished function {x}")
return x * x
def main():
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(my_function, i) for i in range(5)]
for future in concurrent.futures.as_completed(futures):
result = future.result()
print(f"Result: {result}")
if __name__ == "__main__":
main()
使用进程池(ProcessPoolExecutor
):
import concurrent.futures
import time
def my_function(x):
print(f"Starting function {x}")
time.sleep(2) # 模拟耗时操作
print(f"Finished function {x}")
return x * x
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
futures = [executor.submit(my_function, i) for i in range(5)]
for future in concurrent.futures.as_completed(futures):
result = future.result()
print(f"Result: {result}")
if __name__ == "__main__":
main()
在这两个例子中,我们定义了一个名为my_function
的函数,它接受一个参数x
,模拟耗时操作(这里使用time.sleep(2)
),然后返回x
的平方。
在main
函数中,我们创建了一个ThreadPoolExecutor
或ProcessPoolExecutor
实例,然后使用submit
方法将my_function
提交给线程池或进程池。submit
方法返回一个Future
对象,表示异步计算的结果。我们可以使用as_completed
函数来迭代已完成的Future
对象,并获取它们的结果。
注意:ThreadPoolExecutor
适用于I/O密集型任务,而ProcessPoolExecutor
适用于CPU密集型任务。在这个例子中,我们使用了I/O密集型任务(模拟耗时操作),但如果你需要处理计算密集型任务,请使用ProcessPoolExecutor
。