• Python 多线程实现循环打印 abc


    python 多线程实现循环打印 abc

    好久没写过python了, 想自己实践一下把

    非阻塞版

    import threading
    import time
    
    def print_a():
        global value
        global lock
        global stop_flag
        while stop_flag:
            while True:
                if value == 0 or value == 3:
                    break
            lock.acquire()
            value = 1
            time.sleep(1)
            print("aaa")
            lock.release()  
    
    def print_b():
        global value
        global lock
        global stop_flag
        while stop_flag:
            while True:
                if value == 1:
                    break
            lock.acquire()
            value = 2
            time.sleep(1)
            print("bbb")
            lock.release()
    
    def print_c():
        global value
        global lock
        global stop_flag
        while stop_flag:
            while True:
                if value == 2:
                    break
            lock.acquire()
            value = 3
            time.sleep(1)
            print("ccc")
            lock.release()
    
    if __name__ == "__main__":
        stop_flag = True
        value = 0
        threads = []
        lock = threading.Lock()
        thread_a = threading.Thread(target=print_a)
        thread_b = threading.Thread(target=print_b)
        thread_c = threading.Thread(target=print_c)
        threads.append(thread_a)
        threads.append(thread_b)
        threads.append(thread_c)
    
        for thread in threads:
            thread.start()
        time.sleep(5)
        stop_flag = False
    

    阻塞版

    import threading
    import time
    
    def print_a():
        global value
        global stop_flag
        global lock
        global con
        while stop_flag:
            try:
                lock.acquire()
                while value != 0 and value != 3:
                    con.wait()
                time.sleep(1)
                value = 1
                print("aaa")
                con.notify_all()
            finally:
                lock.release()
    
    
    def print_b():
        global value
        global stop_flag
        global lock
        global con
        while stop_flag:
            try:
                lock.acquire()
                while value != 1:
                    con.wait()
                time.sleep(1)
                value = 2
                print("bbb")
                con.notify_all()
            finally:
                lock.release()
        
    
    def print_c():
        global value
        global stop_flag
        global lock
        global con
        while stop_flag:
            try:            
                lock.acquire()
                while value != 2:
                    con.wait()
                time.sleep(1)
                value = 3
                print("ccc")
                con.notify_all()
            finally:
                lock.release()
    
    if __name__ == "__main__":
        stop_flag = True
        value = 0
        threads = []
        # 注意这里使用的是条件变量
        lock = threading.Lock()
        con = threading.Condition(lock=lock)
        thread_a = threading.Thread(target=print_a)
        thread_b = threading.Thread(target=print_b)
        thread_c = threading.Thread(target=print_c)
        threads.append(thread_a)
        threads.append(thread_b)
        threads.append(thread_c)
    
        for thread in threads:
            thread.start()
        time.sleep(5)
        print("stop")
        stop_flag = False
        for thread in threads:
            thread.join()
    
  • 相关阅读:
    win7下iis中配置php.ini文件
    editplus快捷键大全
    树和二叉树的存储结构的实现(C/C++实现)
    CTF---编程入门第一题 循环
    CTF---Web入门第九题 FALSE
    CTF---Web入门第八题 Guess Next Session
    CTF---Web入门第七题 猫抓老鼠
    CTF---Web入门第六题 因缺思汀的绕过
    CTF---Web入门第五题 貌似有点难
    CTF---Web入门第四题 Forms
  • 原文地址:https://www.cnblogs.com/Draymonder/p/11967947.html
Copyright © 2020-2023  润新知