python 线程池顺序执行的方法实现

 更新时间:2025年08月19日 09:08:16   作者:AI浩  
在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在Python中,线程池(ThreadPoolExecutor)默认是并发执行任务的,但若需要实现任务的顺序执行(按提交顺序执行或按结果顺序处理),可以通过以下方案实现:

方案一:强制单线程(伪顺序执行)

将线程池的最大工作线程数设为1,任务会按提交顺序依次执行(但失去了并发意义):

from concurrent.futures import ThreadPoolExecutor

def task(n):
    return f"Task {n} completed"

with ThreadPoolExecutor(max_workers=1) as executor:  # 单线程
    futures = [executor.submit(task, i) for i in range(1, 6)]
    for future in futures:
        print(future.result())

方案二:按提交顺序获取结果

保持并发执行,但按任务提交顺序获取结果(若任务完成顺序不确定):

from concurrent.futures import ThreadPoolExecutor

def task(n):
    import time, random
    time.sleep(random.uniform(0, 1))  # 模拟随机耗时
    return f"Task {n} completed"

with ThreadPoolExecutor() as executor:
    # 提交任务并按顺序存储 Future 对象
    futures = [executor.submit(task, i) for i in range(1, 6)]
    # 按提交顺序逐个获取结果(会阻塞直到对应任务完成)
    for future in futures:
        print(future.result())  # 输出顺序始终是 1,2,3,4,5

方案三:任务间依赖控制

若任务需要严格按顺序执行(前一个任务完成后才能执行下一个),使用同步锁:

from concurrent.futures import ThreadPoolExecutor
import threading

lock = threading.Lock()
current_step = 0

def sequential_task(n):
    global current_step
    while True:
        with lock:
            if n == current_step + 1:
                print(f"Executing Task {n}")
                current_step = n
                break

with ThreadPoolExecutor(max_workers=5) as executor:
    executor.map(sequential_task, range(1, 6))  # 严格按 1→2→3→4→5 执行

方案四:队列顺序消费

使用队列(Queue)控制任务执行顺序:

from concurrent.futures import ThreadPoolExecutor
import queue

def worker(q):
    while not q.empty():
        task_id = q.get()
        print(f"Processing Task {task_id}")
        q.task_done()

task_queue = queue.Queue()
for i in range(1, 6):
    task_queue.put(i)

with ThreadPoolExecutor() as executor:
    # 启动多个线程消费队列(实际按队列顺序执行)
    for _ in range(3):  # 3个工作线程
        executor.submit(worker, task_queue)
    task_queue.join()  # 等待所有任务完成

适用场景总结

方案特点适用场景
单线程池简单但无并发调试或资源受限环境
顺序获取结果并发执行,顺序处理结果结果需按提交顺序处理(如日志写入)
任务间依赖锁严格顺序执行任务有前后依赖关系
队列消费动态任务按队列顺序执行生产者-消费者模型

根据需求选择最合适的方法,通常方案二(顺序获取结果)能满足大多数场景。

到此这篇关于python 线程池顺序执行的方法实现的文章就介绍到这了,更多相关python 线程池顺序执行内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python在协程中增加任务实例操作

    python在协程中增加任务实例操作

    在本篇文章里小编给大家整理的是一篇关于python在协程中增加任务实例操作内容,有兴趣的朋友们可以学习下。
    2021-02-02
  • python使用paramiko实现ssh的功能详解

    python使用paramiko实现ssh的功能详解

    这篇文章主要介绍了python使用paramiko实现ssh的功能详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 浅谈TensorFlow之稀疏张量表示

    浅谈TensorFlow之稀疏张量表示

    这篇文章主要介绍了浅谈TensorFlow之稀疏张量表示,具有很好的参考就价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python基于回溯法子集树模板解决找零问题示例

    Python基于回溯法子集树模板解决找零问题示例

    这篇文章主要介绍了Python基于回溯法子集树模板解决找零问题,简单描述了找零问题并结合具体实例形式分析了Python使用回溯法子集树模板解决找零问题的步骤、实现方法与相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • Windows下PyTorch环境搭建指南

    Windows下PyTorch环境搭建指南

    本文提供了Windows系统下PyTorch的完整安装指南,包括三种方式使用Conda(推荐)、Pip以及国内镜像源加速,并附有具体命令,最后针对常见问题如属性错误、CUDA版本不匹配等提供了解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2026-04-04
  • Python实现字符串逆序输出功能示例

    Python实现字符串逆序输出功能示例

    这篇文章主要介绍了Python实现字符串逆序输出功能,结合具体实例形式分析了Python针对字符串的遍历、翻转、排序等相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • 实用自动化运维Python脚本分享

    实用自动化运维Python脚本分享

    今天小编就为大家分享一篇实用自动化运维Python脚本。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现Excel报表自动化的实践教程

    Python实现Excel报表自动化的实践教程

    这篇文章主要为大家详细介绍了如何使用Python实现Excel报表自动化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-03-03
  • python 按照固定长度分割字符串的方法小结

    python 按照固定长度分割字符串的方法小结

    这篇文章主要介绍了借助python脚本,可以轻松实现,原理就是:字符串的按照固定长度拆分
    2018-04-04
  • python用pyecharts实现地图数据可视化

    python用pyecharts实现地图数据可视化

    这篇文章主要介绍了python用pyecharts实现地图数据可视化,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03

最新评论