Python 生产者和消费者(线程笔记总结)

网友投稿 273 2022-10-01

Python 生产者和消费者(线程笔记总结)

'''生产者与消费者:两个线程之间的通信Python的queue模块中提供了同步的、线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语(可以理解为原子操作,即要么不做要么就做完),能够在多线程中直接使用。可以使用队列来实现线程间的同步'''import threadingimport sysimport queueimport randomimport timedef produce(q): i=0 while i<10: num=random.randint(1,100) q.put("生产者产生数据: %d" % num) print("生产者产生数据: %d" % num) time.sleep(1) i+=1 q.put(None) #完成任务 q.task_done()def consume(q): while True: item = q.get() if item is None: break print('消费者获取到: %s ' % item) time.sleep(4) #完成任务 q.task_done()def main(): passif __name__ == "__main__": q=queue.Queue(10) arr = [] #创建生产者 th = threading.Thread(target=produce,args=(q,)) th.start() #创建消费者 tc = threading.Thread(target=consume,args=(q,)) tc.start() th.join() tc.join() sys.exit(int(main() or 0))'''线程:Thread1. 创建线程 A.t = Thread(target=func,name='',args=(),kwarfs={}) t.start() ---->就绪状态 run() join()等待当前子线程执行完后,主线程才会结束。 func的内容给run,然后start调用run这就是func. B. 自定义线程 class MyThread(Thread): def _init__(self,name): super().__init__ self.name=name def run(self): 任务 t = MyThread() t.start()2. 数据共享 进程共享数据与线程共享数据的区别: 进程是每个进程中都有一份 线程是共用一个数据 -->数据安全性问题 GIL ----> 伪线程 lock = Lock() lock.acquire() ...... lock.release() ---->只要用锁:死锁 避免死锁3.线程间通信:生产者与消费者 生产者:线程 消费者:线程 q=queue.Queue(10) #创建生产者 th = threading.Thread(target=produce,args=(q,)) th.start() #创建消费者 tc = threading.Thread(target=consume,args=(q,)) tc.start() q.put() q.get()扩展:GIL'''

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mysql中的join操作实例分享
下一篇:SpringBoot多数据源读写分离的自定义配置问题及解决方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~