在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。