引入多线程模块
import threading
任何一个进程启动的时候会默认的启动一个线程,这个线程叫主线程,主线程可以启动新的子线程
获取主当前线程的名称
threading.current_thread().name
创建子线程
t=threading.Thread(target=fun,args=(参数1,参数2))
每个进程结束,都会结束当前线程。所以每个主线程都应该等到子进程结束主线程才能结束。
多线程共享数据?
多线程和多进程最大的不同在于,多进程中,同一个变量,各自有一份拷贝存在进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任意一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时修改一个变量,容易把内容改乱。
线程锁解决数据混乱?
优点:线程锁保证了数据的准确性
缺点:阻止了并发执行,包含锁的某段代码实际上是单线程模式执行,所以效率降低了!
由于可以存在多个锁,不同线程持有不同的锁,其他线程并试图获取其他的锁,可能造成死锁,导致多个线程挂起。
创建线程锁对象
lock = threading.Lock()
开始给线程上锁
lock.acquire()
开始给线程释放锁(解锁)
lock.release()
每个线程对ThreadLocal对象都可以读写,但是互不影响
local=Threading.local()
#调度线程?
调度线程是给线程执行的时候设置一个先后的顺序来的。
因为多线程执行是没有顺序的,如果想要让现场顺序执行,那么就要调度线程
引入调度线程
创建Condition
cond=threading.Condition()
等待信号
cond.wait()
释放信号
cond.notify()