python线程池
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, as_completed
import time
import os
import random
import threading
def task(name):
print(f"Hello from task {name} started (PID: {os.getpid()})")
time.sleep(2)
print(f"Task {name} finished")
return f"Result of {name}"
def task1(name):
print(f"Hello from task {name} started (PID: {os.getpid()})")
time.sleep(random.randint(1, 4))
print(f"Task {name} finished")
return f"Result of {name}"
def task2(name):
print(f"Hello from task {name} started (PID: {os.getpid()})")
while True:
if exit_event.is_set():
print("任务中断...")
break
time.sleep(random.randint(1, 4))
print(f"Task {name} running...")
if name == '__main__':
print(f"主进程 (PID: {os.getpid()})")
# with ThreadPoolExecutor(max_workers=3) as executor:
# future1 = executor.submit(task, "A")
# future2 = executor.submit(task, "B")
# future3 = executor.submit(task, "C")
# print(future1.result())
# print(future2.result())
# print(future3.result())
# 多线程实现
# with ThreadPoolExecutor(max_workers=3) as executor:
# futures = [executor.submit(task1, f"task_{i}") for i in range(5)]
# # 按照完成顺序获取结果
# for future in as_completed(futures):
# print(future.result())
# 多进程实现 (调用Multiprocessing模块)
with ProcessPoolExecutor(max_workers=3) as executor:
futures = [executor.submit(task1, f"task_{i}") for i in range(5)]
# 按照完成顺序获取结果
for future in as_completed(futures):
print(future.result())