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多进程并发的实现示例的文章就介绍到这了,更多相关python多进程并发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python3.6 如何将list存入txt后再读出list的方法
这篇文章主要介绍了python3.6 如何将list存入txt后再读出list的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-07-07详解在Python中使用Torchmoji将文本转换为表情符号
这篇文章主要介绍了详解在Python中使用Torchmoji将文本转换为表情符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07Django在urls.py利用函数path()配置路由时传递参数给调用的视图函数的方法(推荐)
这篇文章主要介绍了Django在urls.py利用函数path()配置路由时传递参数给调用的视图函数的方法(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2024-01-01python中的iterator和"lazy iterator"区别介绍
这篇文章主要介绍了python中的iterator和 “lazy iterator“之间有什么区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04
最新评论