当使用ThreadPoolExecutor进行多线程和多进程编程时,可以使用concurrent.futures模块来实现。以下是两个简单的示例,一个使用ThreadPoolExecutor进行多线程编程,另一个使用ProcessPoolExecutor进行多进程编程。
多线程示例:
ThreadPoolExecutor创建了一个包含3个工作线程的线程池,然后使用submit方法将任务分配给线程。wait方法用于等待所有线程完成。
import concurrent.futures
def worker_function(index):
print(f"Thread {index} working")
def main():
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
# 启动多个线程,并分配任务
future_to_index = {executor.submit(worker_function, i): i for i in range(5)}
# 等待所有线程完成
concurrent.futures.wait(future_to_index)
if __name__ == "__main__":
main()
多进程示例:
ProcessPoolExecutor创建了一个包含3个工作进程的进程池,然后使用submit方法将任务分配给进程。同样,wait方法用于等待所有进程完成。
import concurrent.futures
def worker_function(index):
print(f"Process {index} working")
def main():
with concurrent.futures.ProcessPoolExecutor(max_workers=3) as executor:
# 启动多个进程,并分配任务
future_to_index = {executor.submit(worker_function, i): i for i in range(5)}
# 等待所有进程完成
concurrent.futures.wait(future_to_index)
if __name__ == "__main__":
main()
PS:在使用多进程时,函数需要在可执行脚本的最上层定义,以便能够被子进程正确调用。