专栏首页python3Python3备份

Python3备份

Python3生产者/消费者模式

import threading  
import queue,time,random  
  
class Goods:#产品类  
    def __init__(self):  
        self.count = 0
    def add(self,num = 1):
        self.count += num  
    def sub(self):  
        if self.count>=0:  
            self.count -= 1  
    def empty(self):  
        return self.count <= 0

class Producer(threading.Thread):#生产者类  
    def __init__(self,condition,goods,sleeptime = 1):#sleeptime=1  
        threading.Thread.__init__(self)  
        self.cond = condition  
        self.goods = goods  
        self.sleeptime = sleeptime  
    def run(self):  
        cond = self.cond  
        goods = self.goods  
        while True:
            cond.acquire()#锁住资源  
            goods.add()
            print("产品数量:",goods.count,"生产者线程")
            cond.notifyAll()#唤醒所有等待的线程--》其实就是唤醒消费者进程 
            cond.release()#解锁资源
            time.sleep(self.sleeptime)

class Consumer(threading.Thread):#消费者类  
    def __init__(self,condition,goods,sleeptime = 2):#sleeptime=2  
        threading.Thread.__init__(self)
        self.cond = condition
        self.goods = goods
        self.sleeptime = sleeptime
    def run(self):  
        cond = self.cond
        goods = self.goods
        while True:
            time.sleep(self.sleeptime)
            cond.acquire()#锁住资源
            while goods.empty():#如无产品则让线程等待
                cond.wait()
            goods.sub()
            print("产品数量:",goods.count,"消费者线程")
            cond.release()#解锁资源  

g = Goods()
c = threading.Condition()
  
pro = Producer(c,g)  
pro.start()  
  
con = Consumer(c,g)  
con.start()  

Python的锁

import threading
import time

private_lock = threading.RLock()
num = 0


class MyThread(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self)
        self.t_name = name 
        
    def run(self):
        global num
        while True:
            private_lock.acquire()
            if num > 4:
                print("%s" % self.t_name)
                time.sleep(5)
                private_lock.release()
                break
            num += 1
            private_lock.release()


def test1():
    thread1 = MyThread('A')
    thread2 = MyThread('B')
    thread1.start()
    thread2.start()


if __name__ == '__main__':
    test1()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python:线程、进程与协程(3)——

        Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式。该模块提供了三种队列:

    用户2398817
  • Python_类的组合

    A类与B类之间没有共同点,但是A类与B类之间有关联,比如说,医院类与患者类是两个完全不同的类,他们之间没有任何关联,但是患者是属于医院的。此时我们就要用到类的组...

    用户2398817
  • Python实现翻译小工具

    一、背景 利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面。

    用户2398817
  • Python:线程、进程与协程(3)——

        Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式。该模块提供了三种队列:

    用户2398817
  • Python_类的组合

    A类与B类之间没有共同点,但是A类与B类之间有关联,比如说,医院类与患者类是两个完全不同的类,他们之间没有任何关联,但是患者是属于医院的。此时我们就要用到类的组...

    用户2398817
  • 结合知识图谱实现基于电影的推荐系统

    知识图谱(Knowledge Graph,KG)可以理解成一个知识库,用来存储实体与实体之间的关系。知识图谱可以为机器学习算法提供更多的信息,帮助模型更好地完成...

    代码医生工作室
  • Objectiv-c - UICollectionViewLayout自定义布局-瀑布流Demo地址

    公开变量以及代理. 公开的变量是可以进行调用时设置,一般就为这些,delegate用来实现动态的高度设置

    gwk_iOS
  • PyQt5 创建拼图游戏

    本篇代码由PtQt4官方example代码升级而来。其实现的功能是将图片分割后随机打散,以供用户拖放拼图。

    用户6021899
  • python pyqt5 QComboBox下拉列表框 常用

    addItem() addItems() clear() count() currentText() currentIndex()

    用户5760343
  • python面向对象基础

    面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

    菲宇

扫码关注云+社区

领取腾讯云代金券