• #并发的多线程效果演示#继承式多线程#守护线程 #互斥锁(用户自己的锁)


      

     1 #并发的多线程效果演示
     2 '''
     3 import threading
     4 
     5 def run(n):
     6     print ('task',n)
     7 
     8 t1 =threading.Thread(target=run,args=('t1',))
     9 t2 =threading.Thread(target=run,args=('t2',))
    10 
    11 t1.start()
    12 t2.start()
    13 '''
    14 
    15 '''
    16 import threading
    17 
    18 def run(n):
    19     print ('task',n)
    20 
    21 run('t1')
    22 
    23 run('t2')
    24 '''
    25 
    26 '''
    27 import threading
    28 import time
    29 def run(n):
    30     print ('task',n)
    31     time.sleep(2)
    32 
    33 t1 =threading.Thread(target=run,args=('t1',))
    34 
    35 t2 =threading.Thread(target=run,args=('t2',))
    36 
    37 run('t1')
    38 
    39 run('t2')
    40 
    41 '''
    42 
    43 
    44 import threading
    45 import time
    46 def run(n):
    47     print ('task',n)
    48     time.sleep(2)
    49 
    50 t1 =threading.Thread(target=run,args=('t1',))
    51 
    52 t2 =threading.Thread(target=run,args=('t2',))
    53 
    54 t1.start()
    55 
    56 t2.start()
    #并发的多线程效果演示
      1 #继承式多线程
      2 '''
      3 import threading
      4 import time
      5 
      6 class MYThread(threading.Thread):
      7     def __init__(self,n):
      8         super(MYThread,self).__init__()
      9         self.n = n
     10     def run(self):
     11         print ('runnint task',self.n)
     12 
     13 t1 =MYThread('t1')
     14 t2 =MYThread('t2')
     15 
     16 t1.start()
     17 t2.start()
     18 '''
     19 
     20 '''
     21 import threading
     22 import time
     23 
     24 def run(n):
     25     print ('task',n)
     26     time.sleep(2)
     27 
     28 t1 = threading.Thread(target=run,args=('t1',))
     29 t2 = threading.Thread(target=run,args=('t2',))
     30 
     31 t1.start()
     32 t2.start()
     33 
     34 '''
     35 
     36 '''
     37 import threading
     38 import time
     39 
     40 def run(n):
     41     print ('task',n)
     42     time.sleep(2)
     43 
     44 for i in range(50): 
     45 
     46     t = threading.Thread(target=run,args=('t-%s'% i ,))
     47     t.start()
     48  
     49 '''
     50 
     51 '''
     52 import threading
     53 import time
     54 #并行所以无法统计总共的时间
     55 def run(n):
     56     print ('task',n)
     57     time.sleep(2)
     58     print ('task done',n)
     59     
     60 start_time = time.time()
     61 for i in range(50): 
     62 
     63     t = threading.Thread(target=run,args=('t-%s'% i ,))
     64     t.start()
     65 
     66 print ('-------------all threads has finished...')
     67 print ('cost:',time.time() - start_time)
     68 
     69 '''
     70 '''
     71 import threading
     72 import time
     73 #设置等待全部子线程结束来测时间
     74 class MYThread(threading.Thread):
     75     def __init__(self,n,sleep_time):
     76         super(MYThread,self).__init__()
     77         self.n = n
     78 
     79         self.sleep_time = sleep_time
     80     def run(self):
     81         print ('runnint task',self.n)
     82         time.sleep(self.sleep_time)
     83         print ('task done,',self.n)
     84         
     85 t1 =MYThread('t1',2)
     86 t2 =MYThread('t2',4)
     87 
     88 t1.start()
     89 t2.start()
     90 
     91 t1.join()#等待
     92 t2.join()
     93 
     94 print ('main thread...')
     95 
     96 '''
     97 
     98 
     99 import threading
    100 import time
    101 #设置等待全部子线程结束来测时间
    102 def run(n):
    103     print ('task',n)
    104     time.sleep(2)
    105     print ('task done',n)
    106   
    107 start_time = time.time()
    108 t_objs = [] #储存线程实例
    109 for i in range(50): 
    110     t = threading.Thread(target=run,args=('t-%s'% i ,))
    111     t.start()
    112     t_objs.append(t)
    113 
    114 for t in t_objs:
    115     t.join()
    116 
    117 
    118 print ('-------------all threads has finished...')
    119 print ('cost:',time.time() - start_time)
    #继承式多线程

       

     1 #守护线程
     2 
     3 #主线程不在等待守护线程结束 就关闭程序
     4 
     5 import threading
     6 import time
     7 #设置等待全部子线程结束来测时间
     8 def run(n):
     9     print ('task',n)
    10     time.sleep(2)
    11     print ('task done',n,threading.current_thread())
    12   
    13 start_time = time.time()
    14 
    15 #t_objs = [] #储存线程实例
    16 
    17 for i in range(50): 
    18     t = threading.Thread(target=run,args=('t-%s'% i ,))
    19     t.setDaemon(True)#把当前先程设置为守护线程
    20     t.start()
    21     
    22     #t_objs.append(t)
    23 #for t in t_objs:
    24 #    t.join()
    25 
    26 
    27 print ('---all threads has finished...')
    28 print (threading.current_thread(),'当前线程数:',threading.active_count())
    29 print ('cost:',time.time() - start_time)
    #守护线程
     1 #互斥锁(用户自己的锁)
     2 #pyton 2.0不加锁上会出错 #pyton 3.0默认加锁,不会出错
     3 
     4 import threading
     5 import time
     6 
     7 def run(n):
     8     lock.acquire()
     9     global num
    10     num += 1
    11     #time.sleep(1) #没有释放 等于range(50)   50秒
    12     lock.release()
    13     
    14 lock = threading.Lock()
    15 num = 0
    16 
    17 t_objs = [] #储存线程实例
    18 
    19 for i in range(50): 
    20     t = threading.Thread(target=run,args=('t-%s'% i ,))
    21     t.start()
    22     t_objs.append(t)
    23     
    24 for t in t_objs:
    25     t.join()
    26 
    27 
    28 print ('---all threads has finished...')
    29 print (threading.current_thread(),'当前线程数:',threading.active_count())
    30 print ('num:',num)
    #互斥锁(用户自己的锁)

       

     1 #递归锁RLock(递归锁)
     2 
     3 #说白了就是在一个大锁中还要再包含子锁
     4 
     5 
     6 '''
     7 locks = {
     8         door1:key1,
     9         door2:key2
    10          }
    11 '''
    12 import threading,time
    13  
    14 def run1(): #平行房间门
    15     print("grab the first part data")
    16     lock.acquire()
    17     global num
    18     num += 1
    19     lock.release()
    20     return num
    21 def run2(): #平行房间门
    22     print("grab the second part data")
    23     lock.acquire()
    24     global  num2
    25     num2 += 1
    26     lock.release()
    27     return num2
    28 def run3():  #大门
    29     lock.acquire()
    30     res = run1()
    31     print('--------between run1 and run2-----')
    32     res2 = run2()
    33     lock.release()
    34     print(res,res2)
    35 '''
    36 if __name__ == '__main__':
    37  
    38     num,num2 = 0,0
    39     lock = threading.RLock()
    40     for i in range(10):
    41         t = threading.Thread(target=run3)
    42         t.start()
    43 
    44 '''
    45  
    46 num,num2 = 0,0
    47 lock = threading.RLock()
    48 #lock = threading.Lock()
    49 for i in range(10):
    50     t = threading.Thread(target=run3)
    51     t.start()
    52 
    53 while threading.active_count() != 1:
    54     print(threading.active_count())
    55 else:
    56     print('----all threads done---')
    57     print(num,num2)
    #递归锁RLock(递归锁)
     1 #Semaphore(信号量)
     2 '''
     3 互斥锁 同时只允许一个线程更改数据,
     4 而Semaphore是同时允许一定数量的线程更改数据 ,
     5 比如厕所有3个坑,那最多只允许3个人上厕所,
     6 后面的人只能等里面有人出来了才能再进去。
     7 '''
     8 
     9 import threading,time
    10  
    11 def run(n):
    12     semaphore.acquire()
    13     time.sleep(1)
    14     print("run the thread: %s
    " %n)
    15     semaphore.release()
    16  
    17 if __name__ == '__main__':
    18  
    19     #num = 0
    20     semaphore  = threading.BoundedSemaphore(5) #最多允许5个线程同时运行
    21     for i in range(22):
    22         t = threading.Thread(target=run,args=(i,))
    23         t.start()
    24         
    25  
    26 while threading.active_count() != 1:
    27     pass #print threading.active_count()
    28 else:
    29     print('----all threads done---')
    30     #print(num)
    #Semaphore(信号量)
      1 #Events  事件  全局变量
      2 
      3 #通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,
      4 #即起动一个线程做交通指挥灯,生成几个线程做车辆,车辆行驶按红灯停,绿灯行的规则。
      5 '''
      6 
      7 redLight = False
      8 while True:
      9     if counter > 30:
     10         redLight = True
     11 
     12     if counter > 50:
     13         redLight = False
     14         counter = 0
     15 
     16 '''
     17 '''
     18 #红绿灯
     19 import threading,time
     20 
     21 event = threading.Event()
     22 
     23 def lighter():
     24     count = 0
     25     
     26     while True:
     27         if count > 5 and count < 10 :#改成红灯
     28             event.clear()#把标志位置清空
     29             print('1mred light is on--红灯红灯红灯-')
     30         elif count >10 :   
     31             event.set()#改成绿灯
     32             count =0
     33         else:
     34             print('1mgeen light is on--绿灯绿灯绿灯-')    
     35         time.sleep(1)
     36         count += 1
     37 
     38 light = threading.Thread(target=lighter,)
     39 
     40 light.start()
     41 
     42 '''
     43 
     44 
     45 
     46 #红绿灯#车
     47 import threading,time
     48 
     49 event = threading.Event()
     50 
     51 def lighter():
     52     count = 0
     53     event.set() #先设置成绿灯
     54     while True:
     55         if count > 5 and count < 10 :#改成红灯
     56             event.clear()#把标志位置清空
     57             print('1mred light is on--红灯红灯红灯-')
     58         elif count >10 :   
     59             event.set()#改成绿灯
     60             count =0
     61         else:
     62             print('1mgeen light is on--绿灯绿灯绿灯-')    
     63         time.sleep(1)
     64         count += 1
     65 
     66 
     67 def car(name):
     68     while True:
     69         if event.is_set():#代表绿灯
     70             print ('[%s] running...'%name)
     71             time.sleep(1)
     72         else:
     73             print ('[%s] 看到红灯,等待……')
     74             event.wait()
     75             print ('[%s] 绿灯,开始……开车咯' % name)
     76                     
     77     
     78 light = threading.Thread(target=lighter,)
     79 light.start()
     80 
     81 car1 = threading.Thread(target=car,args=('Tesla',))
     82 car1.start()
     83 
     84 
     85 
     86 
     87 
     88 
     89 
     90 '''
     91 import threading,time
     92 import random
     93 def light():
     94     if not event.isSet():
     95         event.set() #wait就不阻塞 #绿灯状态
     96     count = 0
     97     while True:
     98         if count < 10:
     99             print('33[42;1m--green light on---33[0m')
    100         elif count <13:
    101             print('33[43;1m--yellow light on---33[0m')
    102         elif count <20:
    103             if event.isSet():
    104                 event.clear()
    105             print('33[41;1m--red light on---33[0m')
    106         else:
    107             count = 0
    108             event.set() #打开绿灯
    109         time.sleep(1)
    110         count +=1
    111 def car(n):
    112     while 1:
    113         time.sleep(random.randrange(10))
    114         if  event.isSet(): #绿灯
    115             print("car [%s] is running.." % n)
    116         else:
    117             print("car [%s] is waiting for the red light.." %n)
    118 if __name__ == '__main__':
    119     event = threading.Event()
    120     Light = threading.Thread(target=light)
    121     Light.start()
    122     for i in range(3):
    123         t = threading.Thread(target=car,args=(i,))
    124         t.start()
    125 
    126 
    127 
    128 
    129 #这里还有一个event使用的例子,员工进公司门要刷卡, 我们这里设置一个线程是“门”,
    130         #再设置几个线程为“员工”,员工看到门没打开,就刷卡,刷完卡,
    131         #门开了,员工就可以通过。
    132 
    133 
    134 #_*_coding:utf-8_*_
    135 __author__ = 'Alex Li'
    136 import threading
    137 import time
    138 import random
    139 
    140 def door():
    141     door_open_time_counter = 0
    142     while True:
    143         if door_swiping_event.is_set():
    144             print("33[32;1mdoor opening....33[0m")
    145             door_open_time_counter +=1
    146 
    147         else:
    148             print("33[31;1mdoor closed...., swipe to open.33[0m")
    149             door_open_time_counter = 0 #清空计时器
    150             door_swiping_event.wait()
    151 
    152 
    153         if door_open_time_counter > 3:#门开了已经3s了,该关了
    154             door_swiping_event.clear()
    155 
    156         time.sleep(0.5)
    157 
    158 
    159 def staff(n):
    160 
    161     print("staff [%s] is comming..." % n )
    162     while True:
    163         if door_swiping_event.is_set():
    164             print("33[34;1mdoor is opened, passing.....33[0m")
    165             break
    166         else:
    167             print("staff [%s] sees door got closed, swipping the card....." % n)
    168             print(door_swiping_event.set())
    169             door_swiping_event.set()
    170             print("after set ",door_swiping_event.set())
    171         time.sleep(0.5)
    172 door_swiping_event  = threading.Event() #设置事件
    173 
    174 
    175 door_thread = threading.Thread(target=door)
    176 door_thread.start()
    177 
    178 
    179 
    180 for i in range(5):
    181     p = threading.Thread(target=staff,args=(i,))
    182     time.sleep(random.randrange(3))
    183     p.start()
    184 
    185 
    186 
    187 
    188         
    189 '''
    190 
    191         
    #Events 事件 全局变量
  • 相关阅读:
    用MySQL 生成随机密码增加大写处理
    【100题】第三十八 (天平称重、大输入流、去除重复URL)
    【编程珠玑】代码优化的27条经典法则
    cocos2dx:如何快速屏蔽触摸
    【2012百度之星资格赛】A:百度计算器的加法
    【2012百度之星资格赛】C:易手机的套餐
    去掉xcode编译warning:ld: warning: directory not found for option 'L
    【2012百度之星资格赛】D:共同狂欢
    【windows8开发】回复g10589119提出的问题(c#调用C++/CX dll)
    linux shell 之在线文本编辑sed
  • 原文地址:https://www.cnblogs.com/ujq3/p/7345740.html
Copyright © 2020-2023  润新知