我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python的condition和阻塞队

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python的condition和阻塞队

Python的condition和阻塞队列Queue

条件(Condition)

条件同步机制是指:一个线程等待特定条件,而另一个线程发出特定条件满足的信号。 解释条件同步机制的一个很好的例子就是生产者/消费者(producer/consumer)模型。生产者随机的往列表中“生产”一个随机整数,而消费者从列表中“消费”整数。

实例:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/25 9:40
# @File    : produ.py
import random
import threading

import time




#生产者
class Producer(threading.Thread):

    def __init__(self,integers,condition,name):

        """
        构造器
        @:param integers 整数列表
        @:param condition 条件同步对象
        @:param name 线程名字
        """
        threading.Thread.__init__(self)
        self.integers = integers
        self.condition = condition
        self.name = name



    def run(self):
        """
        向队列中随机添加数字
        :return:
        """
        while True:
            integer = random.randint(0,300)
            self.condition.acquire()     #获取锁
            print '锁被',self.name,'拿了'
            self.integers.append(integer)   #加入列表
            print integer,'被',self.name,'加入列表'
            print '锁 被',self.name,'唤醒'
            self.condition.notify()
            print '锁被',self.name,'释放'
            self.condition.release()
            time.sleep(1)


#消费者
class Consumer(threading.Thread):
    def __init__(self,integers,condition,name):
        threading.Thread.__init__(self)
        self.integers = integers
        self.condition = condition
        self.name = name



    def run(self):
        while True:
            self.condition.acquire()
            print '锁被',self.name,'拿了'
            while True:
                if self.integers:
                    integer = self.integers.pop()
                    print integer,'从列表中被',self.name,'移除'
                    break

            print self.name,'等待'
            self.condition.wait()
            print '锁被',self.name,'释放'
            self.condition.release()


def main():
    integers = []
    condition = threading.Condition()
    consumer =  Consumer(integers,condition,'消费者')
    producer = Producer(integers,condition,'生产者')
    producer.start()
    consumer.start()
    producer.join()
    consumer.join()
    if __name__ == '__main__':
        main()


main()

队列(Queue)

队列是一个非常好的线程同步机制,使用队列我们不用关心锁,队列会为我们处理锁的问题。 队列(Queue)有以下4个用户感兴趣的方法:

put: 向队列中添加一个项;

get: 从队列中删除并返回一个项;

task_done: 当某一项任务完成时调用;

join: 阻塞知道所有的项目都被处理完。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/25 10:10
# @File    : que.py

#生产者消费者,阻塞队列实现



import random
from  Queue import  Queue
import  threading
import time


class Producer(threading.Thread):
    """
    @:param queue 阻塞队列
    @:param name 线程名字
    """
    def __init__(self,queue,name):
        threading.Thread.__init__(self)
        self.queue = queue
        self.name = name


    def run(self):
        while True:
            integer = random.randint(0,350)
            self.queue.put(integer)
            print self.name,'将',integer,'加入队列'
            time.sleep(6)



class Consumer(threading.Thread):
    def __init__(self,queue,name):
        threading.Thread.__init__(self)
        self.queue = queue
        self.name = name


    def run(self):
        while True:
            integer = self.queue.get()
            print self.name,'将',integer,'从队列中移除'
            self.queue.task_done()


def main():
    queue = Queue(32)
    consumer = Consumer(queue,'消费者')
    producer = Producer(queue,'生产者')
    producer.start()
    consumer.start()

    if __name__ == '__main__':
        main()

main()

Python的condition和阻塞队

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python的condition和阻塞队

Python的condition和阻塞队列Queue条件(Condition)条件同步机制是指:一个线程等待特定条件,而另一个线程发出特定条件满足的信号。 解释条件同步机制的一个很好的例子就是生产者/消费者(producer/consume
2023-01-31

Nodejs中阻塞和非阻塞的示例分析

这篇文章主要介绍了Nodejs中阻塞和非阻塞的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于阻塞和非阻塞这两个概念大家应该都有一些自己的理解:再简单说一下,阻塞大
2023-06-15

java ArrayBlockingQueue阻塞队列的实现示例

JavaArrayBlockingQueue阻塞队列实现ArrayBlockingQueue是Java并发包中的有界、线程安全的阻塞队列,基于环形数组实现,遵循先进先出(FIFO)原则。它提供插入(put、offer)、移除(take、poll)和其他方法(peek、size、remainingCapacity)。示例代码展示了如何创建队列、插入和移除元素。ArrayBlockingQueue适用于多线程环境,具有线程安全、高性能的优点,但也有容量限制和FIFO顺序的缺点。
java ArrayBlockingQueue阻塞队列的实现示例
2024-04-02

LinkedBlockingQueue链式阻塞队列的使用和原理解析

这篇文章主要介绍了LinkedBlockingQueue链式阻塞队列的使用和原理解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

Python中的同步异步阻塞与非阻塞是什么

今天小编给大家分享一下Python中的同步异步阻塞与非阻塞是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、状态介绍在
2023-07-05

详解Java阻塞队列(BlockingQueue)的实现原理

阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取
2023-05-31

Java阻塞队列的实现原理是什么

本篇文章给大家分享的是有关Java阻塞队列的实现原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。BlockingQueue接口提供了3个添加元素方法:add:添加元素到
2023-06-17

redis怎么实现队列阻塞、延时、发布和订阅

这篇“redis怎么实现队列阻塞、延时、发布和订阅”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“redis怎么实现队列阻塞、
2023-07-02

Java多线程之多种锁和阻塞队列的示例分析

这篇文章给大家分享的是有关Java多线程之多种锁和阻塞队列的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、悲观锁和乐观锁1.1. 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以
2023-06-15

Java中常用阻塞队列的问题是什么

本篇内容主要讲解“Java中常用阻塞队列的问题是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中常用阻塞队列的问题是什么”吧!Java常用阻塞队列ArrayBlockingQueue
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录