美文网首页
入门python(第九篇)多线程

入门python(第九篇)多线程

作者: 小黄不头秃 | 来源:发表于2022-08-29 00:31 被阅读0次

    (一) 线程模块 threading

    python3 通过两个标准库_thread 和 threading 提供对线程的支持。

    threading模块常用方法

    • threading.currentThread():返回当前的线程变量
    • threading.enumerate():返回一个包含正在运行的线程的list。正在运行的线程之线程启动后,结束前,不包括启动前和终止后的线程。
    • threading.activeCount():返回正在运行的现成的数量,与len(threading.enumerate())有相同的结果。
    线程的生命周期

    线程的一些状态:
    1、新建:创建线程对象
    2、就绪:线程有执行资格,没有执行权
    3、运行:有执行资格,有执行权
    4、阻塞:由于一些操作让线程改变了状态,没有执行资格,没有执行权
    另一些操作可以把它给激活,激活处于就绪状态
    5、死亡:线程对象变成垃圾,等待被回收

    import threading
    from time import sleep
    
    def fun1(a):
        for i in range (20): 
            print(i)
            sleep(a)
    def fun2(a):
        for i in range (65,80): 
            print(chr(i))
            sleep(a)
    
    # 创建一个线程
    thread1 = threading.Thread(target=fun1,args=(1,))
    thread2 = threading.Thread(target=fun2,args=(1,))
    
    # 运行线程
    thread1.start()
    thread2.start()
    
    from ast import arg
    import threading
    from time import sleep
    
    def fun1(a):
        for i in range (5): 
            print(i)
            sleep(a)
            # print("threading num:",threading.activeCount())
            
    def fun2(a):
        for j in range (65,70): 
            print(chr(j))
            sleep(a)
            # print("threading num:",threading.activeCount())
    
    class Mythread(threading.Thread):
        def __init__(self,a,fun):
            super().__init__(args=(a,))
            self.a = a
            self.fun = fun
        def run(self):
            self.fun(self.a)
    
    t1 = Mythread(0.8,fun1)
    t2 = Mythread(0.8,fun2)
    t1.start()
    t2.start()
    

    join功能:就是让主线程去等待子线程执行完,再接下去执行。

    import threading
    from time import sleep
    
    def fun1(a):
        for i in range (20): 
            print(i)
            sleep(a)
            if i == 5:
                thread2 = threading.Thread(target=fun2,args=(1,))
                thread2.start()
                thread2.join()
    
    def fun2(a):
        for i in range (65,70): 
            print(chr(i))
            sleep(a)
    
    # 创建一个线程
    thread1 = threading.Thread(target=fun1,args=(0.5,))
    
    # 运行线程
    thread1.start()
    

    lock:在线程中,有一些资源是共享的。多个线程之间可能会出现同时使用资源的时候。可以给数据加把锁,来防止脏读,等。比较经典的就是生产者,消费者模型,可以去了解一下。

    import threading
    from time import sleep
    
    ticket = 10
    lock = threading.Lock()
    def sell():
        global ticket
        global lock
        lock.acquire()
        while ticket>=0:
            print("ticket number:",ticket)
            ticket-=1
            sleep(0.1)
            lock.release()
    
    for i in range(3):
        thread = threading.Thread(target=sell)
        thread.start()
    

    使用python打印时间。
    最重要的是将时间继续格式化

    • time.strftime("%Y-%m-%d %H:%M:%S",time.localtime)
    • time.strftime("%a %b %d %H:%M:%S %Y",time.localtime)
    • time.mktime(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime)) # 时间戳
    import time
    
    print(time.localtime())
    print(time.asctime( time.localtime())) # 格式化
    
    import time
    
    print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
    print(time.strftime("%a %b %d %H:%M:%S %Y",time.localtime()))
    print(time.mktime(time.localtime())) # 时间戳
    

    相关文章

      网友评论

          本文标题:入门python(第九篇)多线程

          本文链接:https://www.haomeiwen.com/subject/nawtnrtx.html