python多线程如何获取有序结果
作者:我是谁,我在哪,我在干啥
在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()
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。