- 全局变量
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 =', num)
- 线程锁
import threading money = 250 def run(n): global money for i in range(1000000): ''' # 获取锁 lock.acquire() try: # 原则上运算之后不会修改money 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: t1 = threading.Thread(target=run, args=(5,)) t2 = threading.Thread(target=run, args=(10,)) t1.start() t2.start() t1.join() t2.join() if money != 250: break print(money)
- 线程类
from threading import Thread import time # 自定义线程类,需要继承自Thread class EmailThread(Thread): def __init__(self, email): super().__init__() self.email = email # 执行线程的start方法,就会调用 def run(self): print('邮件发送开始') print('邮件:',self.email) for i in range(6): time.sleep(1) print('发送进度:{}'.format(i * 20)) print('邮件发送完毕') if __name__ == '__main__': print('主线程开始') et = EmailThread('恭喜你中奖1000000!') et.start() et.join() print('主线程结束')
- 定时线程
import threading import os def run(): # os.system('start cmd') os.system('start calc') if __name__ == '__main__': # 定时线程:3s后执行线程函数run 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('走你')
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~