开发者

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

目录
  • python多线程获取有序结果
    • 功能封装
    • 执行
  • python同步应用:多个线程有序执行
    • 总结

      python多线程获取有序结果

      功能封装

      import threading
      
      class MyThread(threading.Thread):
          def __init__(self, func, args, name=''):
              threading.Thread.__init__(self)
              self.name = name
              sNoxXhKelf.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
      
      

      执行

      depythonf 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(http://www.devze.com)  # 开启线程的执行
      t2.start()
      t3.start()
       
      t1.join()  # 回收线程资源
      tjavascript2.join()
      t3.join()

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.cppcphpns.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜