• python---Thread


    线程简单写法:

    import threading,time
    
    def run(n):
        time.sleep(2)
        print("task",n)
    
    #
    # t1 = threading.Thread(target=run,args=(10,"t1"))
    # t2 = threading.Thread(target=run,args=(3,"t2"))
    # t1.start()
    # t2.start()
    
    start_time = time.time()
    for i in range(50):
        t = threading.Thread(target=run,args=(i,))
        t.start()
    
    exit("exit!")
    

    线程等待:

    import threading,time
    
    
    class MyThread(threading.Thread):
        def __init__(self, n,sleep_time):
            super(MyThread,self).__init__()
            self.n = n
            self.sleeptime = sleep_time
    
        def run(self):
            print("running task", self.n)
            time.sleep(self.sleeptime)
            print("task done",self.n)
    
    
    t1 = MyThread("t1",2)
    t2 = MyThread("t2",4)
    
    start_time = time.time()
    t1.start()
    t1.join()
    t2.start()
    t2.join()
    end_time = time.time()
    ptime = end_time - start_time
    print(ptime)
    

    并发:

    def run(n):
        time.sleep(2)
        print("task",n)
    
    start_time = time.time()
    t_objs = []
    for i in range(50):
        t = threading.Thread(target=run,args=('t-%s'%i,))
        t.start()
        t_objs.append(t)
    
    for t in t_objs:
        t.join()
    
    print("---------------all thread has finished...")
    print("cost:",time.time()-start_time)
    

    设置守护进程:

    import threading,time
    
    def run(n):
        time.sleep(2)
        print("task done",n,threading.current_thread())
    
    start_time = time.time()
    t_objs = []
    for i in range(50):
        t = threading.Thread(target=run,args=('t-%s'%i,))
        t.setDaemon(True)  #把当前线程设置成守护线程,需要在start前设置
        t.start()
        t_objs.append(t)
    
    # for t in t_objs:
    #     t.join()
    
    print("---------------all thread has finished...",threading.current_thread())
    print("cost:",time.time()-start_time)
    

    递归锁:

    import threading
    import time
    
    
    def run1():
        print("grad the first part data")
        lock.acquire()
        global num
        num += 1
        lock.release()
        return num
    
    
    def run2():
        print("grab the second part data")
        lock.acquire()
        global num2
        num2 += 1
        lock.release()
        return num2
    
    
    def run3():
        lock.acquire()
        res = run1()
        print("-------------between run1 and run2----------")
        res2 = run2()
        lock.release()
        print(res, res2)
    
    
    num, num2 = 0, 0
    lock = threading.RLock()
    for i in range(10):
        t = threading.Thread(target=run3)
        t.start()
    
    while threading.active_count() != 1:
        print(threading.active_count())
    else:
        print("--------all threads done----------")
        print(num, num2)
    

    信号量:

    import threading
    import time
    
    
    def run(n):
        semaphore.acquire()
        time.sleep(1)
        print("run the thread:%s
    " % n)
        semaphore.release()
    
    
    if __name__ == '__main__':
    
        semaphore = threading.BoundedSemaphore(5)   #设定了最大5个线程同时运行
        for i in range(22):
            t = threading.Thread(target=run, args=(i,))
            t.start()
    
    while threading.active_count() != 1:
        pass
    else:
        print("-----------all threads done----------")
    

    event:

    import time
    import threading
    
    event = threading.Event()
    
    
    
    def lighter():
        count = 0
        event.set()
        while True:
            if count > 5 and count <= 10:  #改成红灯
                event.clear()
                print("33[41;1mred light is on ....33[0m")
    
            elif count > 10:
                event.set() #变绿灯
                count = 0
            else:
                print("33[42;1mgreen light is on....33[0m")
            time.sleep(1)
            count += 1
            print(count)
    
    def car(name):
        while True:
            if event.is_set():
                print("[%s] running..." % name)
            else:
                print("[%s] sees red light , waiting..." % name)
                event.wait()
                print("33[34;1m[%s] green light is on, start going...33[0m" % name)
            time.sleep(1)
    
    light = threading.Thread(target=lighter,)
    light.start()
    
    car1 = threading.Thread(target=car, args=("Tesla",))
    car1.start()
    
  • 相关阅读:
    函数参数太多的一种简化方法
    laravel 获取所有表名
    使用 laravel 的 queue 必须知道的一些事
    git "refusing to merge unrelated histories" 解决方法
    使用 xhprof 进行 php 的性能分析
    php 性能优化
    js原生实现轮播图效果(面向对象编程)
    nextSibling 和nextElementSibling
    如何在页面中使用svg图标
    svg动画 animate
  • 原文地址:https://www.cnblogs.com/guqing/p/6426742.html
Copyright © 2020-2023  润新知