python多进程并发

虚假的并发,当你调用future.result()时,它会阻塞当前线程,直到任务完成并返回结果。因此,当你在循环中调用future.result()时,程序会按顺序执行任务,而不是并发执行。

import concurrent.futures
import time

# 创建一个进程池
process_pool = concurrent.futures.ProcessPoolExecutor(max_workers=8)

# 定义任务函数
def task_function(task_id):
    print(f"Task {task_id} started")
    # 执行任务的逻辑
    time.sleep(1)
    print(f"Task {task_id} completed")
    return 1
# 提交任务到进程池
def submit_task(task_id):
    future = process_pool.submit(task_function, task_id)
    return future

# 示例任务列表
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
# 提交任务到进程池,并等待任务完成
futures = []
t1 =time.time()
for task_id in task_list:
    future = submit_task(task_id)
    futures.append(future)
    # result.append(future.result())
# 等待进程池中的任务完成
concurrent.futures.wait(futures)
# 关闭进程池
t2 = time.time()
print(t2-t1,"s")
process_pool.shutdown()
print(result)

如果你想要实现并发执行任务,并且在所有任务完成后获取结果,可以使用concurrent.futures.as_completed()方法来实现。这个方法返回一个迭代器,可以按照任务完成的顺序获取结果。

import concurrent.futures
import time

# 创建一个进程池
process_pool = concurrent.futures.ProcessPoolExecutor(max_workers=8)

# 定义任务函数
def task_function(task_id):
    print(f"Task {task_id} started")
    # 执行任务的逻辑
    time.sleep(1)
    print(f"Task {task_id} completed")
    return task_id

# 提交任务到进程池
def submit_task(task_id):
    future = process_pool.submit(task_function, task_id)
    return future

# 示例任务列表
task_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []

# 提交任务到进程池,并等待任务完成
futures = []
t1 = time.time()
for task_id in task_list:
    future = submit_task(task_id)
    futures.append(future)

# 获取任务结果
for future in concurrent.futures.as_completed(futures):
    result.append(future.result())

t2 = time.time()
print(t2 - t1, "s")
print(result)

# 关闭进程池
process_pool.shutdown()

你可能感兴趣的:(python,java,服务器)