博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python多线程(队列同步)
阅读量:6248 次
发布时间:2019-06-22

本文共 1389 字,大约阅读时间需要 4 分钟。

hot3.png

当多个线程需要共享数据或者资源的时候,可能会使得线程的使用变得复杂。线程模块提供了许多同步原语,包括信号量、条件变量、事件和锁。当这些选项存在时,最佳实践是转而关注于使用队列。相比较而言,队列更容易处理,并且可以使得线程编程更加安全,因为它们能够有效地传送单个线程对资源的所有访问,并支持更加清晰的、可读性更强的设计模式。

Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。

用FIFO队列实现上述生产者与消费者问题的代码如下:

#encoding=utf-8import threadingimport timefrom Queue import Queueclass Producer(threading.Thread):    def run(self):        global queue        count = 0        while True:            for i in range(100):                if queue.qsize() > 1000:                     pass                else:                     count = count +1                     msg = '生成产品'+str(count)                     queue.put(msg)                     print msg            time.sleep(1)class Consumer(threading.Thread):    def run(self):        global queue        while True:            for i in range(3):                if queue.qsize() < 100:                    pass                else:                    msg = self.name + '消费了 '+queue.get()                    print msg            time.sleep(1)queue = Queue()def test():    for i in range(500):        queue.put('初始产品'+str(i))    for i in range(2):        p = Producer()        p.start()    for i in range(5):        c = Consumer()        c.start()if __name__ == '__main__':    test()

转载于:https://my.oschina.net/yulongjiang/blog/182368

你可能感兴趣的文章
快速排序
查看>>
排版与缩写
查看>>
C#使用xpath查找xml节点信息
查看>>
简单的语句统计所有用户表尺寸大小
查看>>
作业四:个人项目---小学四则运算
查看>>
漂亮的按钮样式-button
查看>>
post请求方式的翻页爬取内容及思考
查看>>
VC++ MFC如何生成一个可串行化的类
查看>>
php 变量引用,函数引用
查看>>
NET生成缩略图
查看>>
微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目...
查看>>
渗流稳定性分析(MATLAB实现)
查看>>
POJ2253 Frogger(最短路径)
查看>>
动画总结?
查看>>
HDU 2044 一只小蜜蜂 *
查看>>
Java 斜杠 与 反斜杠
查看>>
垂直居中
查看>>
idea下maven项目,样式css、js更新后,页面不显示更新内容
查看>>
bzoj 1001 平面图转对偶图 最短路求图最小割
查看>>
php 记住密码自动登录
查看>>