• day11学python 多线程+queue


    多线程+queue

    两种定义线程方法

    1调用threading.Thread(target=目标函数,args=(目标函数的传输内容))(简洁方便)

    2创建一个类继承与(threading.Thread)并重构run()函数

    class MyThread(threading.Thread):
    def run(self):

    1.直接调用函数方法实例
    import threading,time
    
    def run(n):
        print("test",n)
        time.sleep(2)
    start_time=time.time()
    tall=[]             #用作储存线程实例
    for i in range(50):
        t=threading.Thread(target=run,args=('t-%s'%i,))
        t.setDaemon(True)  #把当前线程设置为守护线程
        t.start()
        tall.append(t)
    
    # for t in tall:
    #     t.join()
    print("time:",time.time()-start_time)
    print(threading.active_count())

    2.①继承类 ②实例化 示例

    import threading,time
    class MyThread(threading.Thread):
        def __init__(self,n):
            super(MyThread,self).__init__()
            self.n=n
        def run(self):
            print("running task",self.n)
    
    t1=MyThread("t1")
    t2=MyThread("t2")
    t1.start()
    t2.start()

    补充:

    1两个进程一起进行 线程.join()等待该线程执行完毕后 在进行之后操作

    2整个程序有主线程,会和其他线程并行

    3可将线程储存在数组里

    4  t.setDaemon(True)  #把当前线程设置为守护线程-主线程结束守护线程自动结束(主仆关系)

    5 t.start()调用start函数代表线程开始

    ================================================

    步对象 event

    可调用的函数
    #event.wait() 使当前线程等待 直到被设定
    #event.set() 设定标志位
    #event.is_set() 判断是否被设定
    #event.clear() 清除设定
    以下是对红绿灯的示例
    灯为一线程
    车为一线程
    import time
    import threading
    event=threading.Event()
    def lighter():
        count=0
        event.set()
        while True:
            time.sleep(1)
            if count>4 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
    def car(name):
        while True:
            if event.is_set():
                print(name,"is going")
                time.sleep(1)
            else:
                print(name,"stop!")
                event.wait()
    car1=threading.Thread(target=car,args=("宝马",))
    car1.start()
    t=threading.Thread(target=lighter,)
    t.start()

    注意:

    1先实例化event对象 event=threading.Event()

    2利用上方红字4个event函数调用 达到多线程交互进行

    3threading.Thread(target=car,args=("宝马",)) 在实例化线程时threading.Thread(target=调用的函数名,args=(参数,))  //必须使用元组形式

    ==========================================================

    queue队列

    q=queue.Queue(maxsize=5) 首先实例化队列 可以自定最大值需要maxsize=

    1q.put()  //向队列中塞一个

    2q.get()  //从队列中取一个

    最多塞maxsize个 最少为0个 取一个后,此数据将不存在

    以下是对queue的实例

    提供者与两个消费者三线程

    提供者最多产5个 

    import queue,threading,time
    q=queue.Queue(maxsize=5)
    def produce(name):
        count=0
        while True:
            count+=1
            # print(count)
            q.put("%s生产%s个面包"%(name,count))
            print("产了",count)
            time.sleep(0.2)
    def consumer(name):
        while True:
            print(name,"is eating ",q.get())
            time.sleep(1)
    a=threading.Thread(target=produce,args=("cf",))
    b=threading.Thread(target=consumer,args=("xxx",))
    c=threading.Thread(target=consumer,args=("sss",))
    a.start()
    b.start()
    c.start()

    注意:

    q=queue.Queue(maxsize=5)务必使用前实例化!!

  • 相关阅读:
    微信小程序开发(十一)获取手机的完整详细信息
    24小时学通Linux内核总结篇(kconfig和Makefile & 讲不出再见)
    24小时学通Linux内核之向内核添加代码
    24小时学通Linux内核之构建Linux内核
    24小时学通Linux内核之电源开和关时都发生了什么
    24小时学通Linux内核之调度和内核同步
    24小时学通Linux内核之有关Linux文件系统实现的问题
    24小时学通Linux内核之如何处理输入输出操作
    24小时学通Linux内核之内存管理方式
    24小时学通Linux内核之进程
  • 原文地址:https://www.cnblogs.com/cc123nice/p/10590563.html
Copyright © 2020-2023  润新知