一、线程
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
创建线程的两种方式1.threading.Thread
import threading def f1(arg): print(arg) t = threading.Thread(target=f1,args=(123,)) #t.start代表这个线程已经准备就绪,等待cpu的调度。 t.start()
2.自定义,继承threading.Thread
class MyThread(threading.Thread): def __init__(self, func,args): self.func = func self.args = args super(MyThread, self).__init__() def run(self): self.func(self.args) def f2(arg): print(arg) t1 = MyThread(f2,1234) t1.start()
二、线程锁
当多个线程同时修改同一条数据时可能会出现脏数据,所以,出现了线程锁 - 同一时刻允许一个线程执行操作。
##没使用锁 import threading import time NUM = 10 def f1(): global NUM NUM -= 1 time.sleep(2) print(NUM) for i in range(10): t = threading.Thread(target=f1) t.start() ##使用锁 def f1(l): global NUM #上锁 l.acquire() NUM -= 1 time.sleep(2) print(NUM) #开锁 l.release() #创建锁,Rlock可以加多层锁 lock = threading.RLock() for i in range(10): t = threading.Thread(target=f1,args=(lock,)) t.start()
时间: 2024-12-07 12:33:16