python多线程如何获取有序结果

 更新时间:2024年09月10日 08:34:36   作者:我是谁,我在哪,我在干啥  
在Python中,多线程编程是一个常见需求,尤其是在处理I/O密集型任务时,然而,多线程环境下保持任务执行结果的顺序通常较为复杂,为了解决这一问题,可以通过封装一个功能来确保即使在多线程环境下,任务的执行结果也能按照一定的顺序进行收集和处理

python多线程获取有序结果

功能封装

import threading

class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self)
        self.name = name
        self.func = func
        self.args = args
        
    def run(self):
        self.result = self.func(*self.args)
        
    def get_result(self):
        try:
            return self.result
        except Exception:
            return None

执行

def main():
    threads = []
    nloops = 函数列表
    for i in nloops:
        t = MyThread(函数, (参数,))
        threads.append(t)
    for i in threads :   # start threads 此处并不会执行线程,而是将任务分发到每个线程,同步线程。等同步完成后再开始执行start方法
        i.start()
    results= []
    for i in threads:   # jion()方法等待线程完成
        i.join()
        results.append(i.get_result())  # 获取所有结果列表
    print(threads[1].get_result())  # 获取其中一个结果

python同步应用:多个线程有序执行

可以使用互斥锁完成多个任务,有序的进程工作,这就是线程的同步

from threading import Thread, Lock
import time
mutex1= Lock()  # 创建一个互斥锁
mutex2= Lock()  # 创建一个互斥锁
mutex3= Lock()  # 创建一个互斥锁
 
 
def fun1():
    while 1:
        mutex1.acquire()  # 阻塞
        print("线程1 执行")
        mutex2.release()   # 释放锁2,让线程2继续执行
        time.sleep(0.1)
 
 
def fun2():
    while 1:
        mutex2.acquire()  # 阻塞
        print("线程2 执行")
        mutex3.release()   # 释放锁3,让线程3继续执行
        time.sleep(0.1)
 
 
def fun3():
    while 1:
        mutex3.acquire()  # 阻塞
        print("线程3 执行")
        mutex1.release()   # 释放锁1,让线程1继续执行
        time.sleep(0.1)
 
t1 =Thread(target=fun1)  # 创建一个线程对象
t2 =Thread(target=fun2)  # 创建一个线程对象
t3 =Thread(target=fun3)  # 创建一个线程对象
 
mutex2.acquire()  # 将锁2设置为上锁,线程2不能运行
mutex3.acquire()  # 将锁2设置为上锁,线程2不能运行
 
t1.start()  # 开启线程的执行
t2.start()
t3.start()
 
t1.join()  # 回收线程资源
t2.join()
t3.join()

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用Python将.py文件转换为PDF并实现语法高亮

    使用Python将.py文件转换为PDF并实现语法高亮

    在开发工作中,我们经常需要分享或归档 Python 脚本文件,.py 文件虽然在编辑器中可读性强,但直接发送给他人时,缺乏格式统一、排版美观,且打印体验不佳,Python 生态中有多种方式可以实现代码转 PDF,本文将介绍两种常见的实现方法,需要的朋友可以参考下
    2025-12-12
  • Python使用微信itchat接口实现查看自己微信的信息功能详解

    Python使用微信itchat接口实现查看自己微信的信息功能详解

    这篇文章主要介绍了Python使用微信itchat接口实现查看自己微信的信息功能,结合实例形式分析了Python微信itchat模块常见功能与操作技巧,需要的朋友可以参考下
    2019-08-08
  • pandas将多个dataframe以多个sheet的形式保存到一个excel文件中

    pandas将多个dataframe以多个sheet的形式保存到一个excel文件中

    这篇文章主要介绍了pandas将多个dataframe以多个sheet的形式保存到一个excel文件中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python统计文本文件内单词数量的方法

    python统计文本文件内单词数量的方法

    这篇文章主要介绍了python统计文本文件内单词数量的方法,涉及Python针对文本文件及字符串的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • 本地不用Docker用Python运行Open WebUI完整指南(附问题解决)

    本地不用Docker用Python运行Open WebUI完整指南(附问题解决)

    Open WebUI是一个可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线操作,这篇文章主要介绍了本地不用Docker用Python运行Open WebUI的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-02-02
  • Python threading.local代码实例及原理解析

    Python threading.local代码实例及原理解析

    这篇文章主要介绍了Python threading.local代码实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 聊聊python中的load、loads实现反序列化的问题

    聊聊python中的load、loads实现反序列化的问题

    在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型。本文给大家分享python中的load、loads实现反序列化的问题,感兴趣的朋友一起看看吧
    2021-10-10
  • 使用Python按类型/名称/日期自动归类5000个文件的代码实现

    使用Python按类型/名称/日期自动归类5000个文件的代码实现

    文章介绍了使用Python自动化文件管理方案,通过按文件类型、日期归档和智能重命名等功能,大幅提高了文件管理的效率和可复用性,测试结果显示,自动化方案相比传统方法和商业软件,耗时更短、内存占用更低,文章还提供了详细的代码实现步骤和效率对比,需要的朋友可以参考下
    2026-01-01
  • python实现TCP文件传输

    python实现TCP文件传输

    这篇文章主要为大家详细介绍了python实现TCP文件传输,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 10个顶级Python实用库推荐

    10个顶级Python实用库推荐

    这篇文章主要推荐了10个顶级Python实用库,帮助大家更好的理解和学习实用python,感兴趣的朋友可以了解下
    2021-03-03

最新评论