• Day 30 process&thread_2


    进程和线程_2

    1、继承类创建线程

     1 import threading,time
     2 
     3 class Mythread(threading.Thread):       #建立类,继承threading.Thread
     4     def __init__(self):
     5         threading.Thread.__init__(self)     #继承父类的__init__功能
     6 
     7     def run(self):          #run为python 自带,后面实例化后,start()自动调用run()功能
     8         print("{name} start to read in the {time}.".format(name=self,time = time.ctime()))
     9 
    10 l = []
    11 for i in range(6):
    12     t = Mythread()
    13     t.start()                       #相当于t.run() 
    14     l.append(t)
    15     t.join()
    16 
    17 # for j in l:
    18 #     j.join()
    19 
    20 print("All is end...{time}".format(time=time.ctime()))

    2、互斥锁

     1 import threading
     2 import time
     3 
     4 lock = threading.Lock()         #引用互斥锁,使用前先定义
     5 
     6 def sub():
     7     global num
     8     lock.acquire()              #lock.aquire() 引用锁后,只有运行到release()才能让其它单位继续引用
     9     temp = num
    10     time.sleep(0.1)
    11     num = temp - 1
    12     lock.release()              #释放锁
    13     time.sleep(2)
    14 
    15 num = 100
    16 l = []
    17 for i in range(100):
    18     t = threading.Thread(target=sub,args=())
    19     t.start()
    20     l.append(t)
    21 
    22 for t in l:
    23     t.join()
    24 
    25 print(num)

    3、递归锁和死锁

    import threading,time
    
    Rlock = threading.RLock()  #Rlock引入Lock和counter变量,每进行一次acquire,counter计数一次,release则减少一次,直到归0,其它线程才可以获得资源。
    
    class Th(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
    
        def run(self):
            self.foo()
            self.bar()
    
        def foo(self):
            Rlock.acquire()
            print("I am %s GET LOCKA.....%s" %(self.name,time.ctime()))
            Rlock.acquire()
            print("I am %s GET LOCKB.....%s" %(self.name,time.ctime()))
            Rlock.release()
            Rlock.release()
    
        def bar(self):
            Rlock.acquire()
            print("I am %s GET LOCKA.....%s" %(self.name,time.ctime()))
            time.sleep(1)
            Rlock.acquire()
            print("I am %s GET LOCKB.....%s" %(self.name,time.ctime()))
            Rlock.release()
            Rlock.release()
    
    
    for i in range(10):
        t = Th()
        t.start()

      

  • 相关阅读:
    Tengine 常用模块使用介绍
    linux curl 命令详解,以及实例
    win7或win2008 R2 被远程登录日志记录 系统日志
    PHP 弹出文件下载
    JavaScript 的性能优化:加载和执行
    网店转化率太低,你该怎么办?
    rpm安装PostgreSQL
    failed to load selinux policy freezing
    Scanner类nextInt方法的使用注意点
    tomcat支持https的历程
  • 原文地址:https://www.cnblogs.com/LiChaoAI/p/7200474.html
Copyright © 2020-2023  润新知