多线程类的方法 import threading,time class MyThread(threading.Thread): def __init__(self,mun): threading.Thread.__init__(self) self.mun = mun def run(self): print(self.mun) time.sleep(2) if __name__ == '__main__': t1 = MyThread(1) t1.start()
join等待 方法 等待多线程执行完 在执行下一个进程 import threading,time def run(n): time.sleep(1) print(n) t_list = [] for i in range(10): t = threading.Thread(target=run,args=(i,)) t.start() t_list.append(t) for i in t_list: i.join() print('____________________')
一种错误的用法
def run(n): time.sleep(1) print(n) for i in range(10): t = threading.Thread(target=run,args=(i,)) t.start() t.join() print('____________________')
import threading,time 进程守护 setDaemon def run(n): time.sleep(1) print(n) for i in range(10): t = threading.Thread(target=run,args=(i,)) t.setDaemon(True) t.start() print('____________________')
import threading,time # 线程互拆锁 def run(n): global mun time.sleep(1) l.acquire() #声明锁 mun -= 1 l.release() #释放所 l = threading.Lock() #生命一个锁的实例 mun = 0 list_1 = [] for i in range(100): t = threading.Thread(target=run,args=(i,)) t.start() list_1.append(t) for i in list_1: i.join() print('____________________') print(mun)
import threading,time # 如果把sleep 放在锁里面 就会出现穿行的情况 def run(n): global mun l.acquire() #声明锁 mun -= 1
time.sleep(1) l.release() #释放所 l = threading.Lock() #生命一个锁的实例 mun = 0 list_1 = [] for i in range(100): t = threading.Thread(target=run,args=(i,)) t.start() list_1.append(t) for i in list_1: i.join() print('____________________') print(mun)
import threading,time #允许多个进程同时进行的锁 theading.BoundedSemaphore def run(n): global mun l.acquire() #声明锁 mun -= 1 time.sleep(1) l.release() #释放所 print(mun) def run1(n): time.sleep(1) print(n) l = threading.BoundedSemaphore(5) #声明一个允许多个线程修改的全局变量的 锁 mun = 0 for i in range(100): t = threading.Thread(target=run,args=(i,)) t.start() print(threading.active_count()) #进程活动的数量 print('____________________') print(mun)
import threading,time #event 进程之间的交互 event.set()设置 event.clear()明确 event.wait()等待, def light(): cont = 0 while True: if cont < 30: if not event.is_set(): event.set() print('lmgreen------',cont) elif cont < 35: print('yellow-------',cont) elif cont < 60: if event.is_set(): event.clear() print('red-------',cont) else: cont = 0 cont += 1 time.sleep(0.3) def car(n): cont = 0 while True: event.wait() print(' @~~%s~~@'%n) time.sleep(0.2) event = threading.Event() car_1 = threading.Thread(target=car,args=(1,)) car_1.start() red_light = threading.Thread(target=light,) red_light.start()