python:线程数据共享和线程锁知识大全

    SEO基础 wuya 128次浏览 已收录 0个评论
    • 数据共享
      import threading
      
      # 全局变量:线程之间可以共享
      num = 250
      
      def run():
          global num
          num += 10
          print('子线程修改全局变量') 
          
      if __name__ == '__main__':
          thr = threading.Thread(target=run)
          thr.start()
          thr.join()
          print('主进程结束', num)    
    • 线程锁
      import threading
      
      money = 250
      
      def run(n):
          global money
          for i in range(100000):
              '''
              # 获取锁
              lock.acquire()
              try:
                  money += n
                  money -= n
              except Exception as e:
                  print('出现异常:', e)
              finally:
                  # 释放锁
                  lock.release()
              '''
              # 简化操作
              with lock:
                  money += n
                  money -= n   
                  
      if __name__ == '__main__':
          # 创建线程锁
          lock = threading.Lock()
          while True:
              thr1 = threading.Thread(target=run, args=(5,))
              thr2 = threading.Thread(target=run, args=(10,))
              thr1.start()
              thr2.start()
              thr1.join()
              thr2.join()
              if money != 250:
                  break
          print(money)
    • 线程类
      from threading import Thread
      import time
      
      # 自定义线程类
      class EmailThread(Thread):
          def __init__(self, email):
              super().__init__()
              self.email = email
      
          def run(self):
              print('邮件发送开始')
              print('发送邮件:', self.email)
              for i in range(1, 6):
                  print('发送进度:{}%'.format(i * 20))
                  time.sleep(1)
                  print('邮件发送结束')
                  
      if __name__ == '__main__':
          print('主线程开始')
          thr = EmailThread('恭喜你中奖了!')
          thr.start()
          thr.join()
          print('主线程结束') 
    • 定时线程:延时线程
      import threading
      import os
      
      def run():
          os.system('calc')
          
      if __name__ == '__main__':
          # 创建定时线程:3秒后开始执行线程任务
          t = threading.Timer(3, run)
          t.start()
          t.join()
    • 信号传递:控制另一线程的执行
      import threading
      import time
      
      def run(num):
          for i in range(num):
              # 等待条件成立,程序会阻塞
              e.wait()
              print('子线程执行:{}'.format(i+1))
              # 清除条件,再次wait又会阻塞
              e.clear()  
              
      if __name__ == '__main__':
          e = threading.Event()
          num = 3
          thr = threading.Thread(target=run, args=(num,))
          thr.start()
          for i in range(num):
              time.sleep(1)
              # 设置条件,wait处将不再阻塞
              e.set()
              print('走你...')

    学海无涯 , 版权所有丨如未注明 , 均为原创丨转载请注明python:线程数据共享和线程锁知识大全
    喜欢 (0)
    发表我的评论
    取消评论
    表情 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址