Python从门到精通(六):线程-03-线程间通信

Python从门到精通(六):线程-03-线程间通信

原创

生而为人我很遗憾博主文章分类:python ©著作权

文章标签 优先级队列 协调者 线程池 python 文章分类 Python 后端开发

©著作权归作者所有:来自51CTO博客作者生而为人我很遗憾的原创作品,请联系作者获取转载授权,否则将追究法律责任

一、共享队列

1.1、​简单队列

from queue import Queuefrom threading import Threaddef producer(out_q):    while True:        data = 'hello world!'        out_q.put(data)def consumer(in_q):    while True:        data = in_q.get()        print(f'get data is: {data}')q = Queue()t1 = Thread(target=consumer, args=(q,))t2 = Thread(target=producer, args=(q,))t1.start()t2.start()

1.2、协调者队列

from queue import Queuefrom threading import Thread_sentinel = object()def producer(out_q):    put_time = 0    while True:        data = 'hello world!'        out_q.put(data)        put_time += 1        if put_time == 5:            out_q.put(_sentinel)def consumer(in_q):    while True:        data = in_q.get()        print(f'get data is: {data}')        if data is _sentinel:            in_q.put(_sentinel)            breakq = Queue()t1 = Thread(target=consumer, args=(q,))t2 = Thread(target=producer, args=(q,))t1.start()t2.start()

1.3、优先级队列

import heapqimport threadingclass PriorityQueue:    def __init__(self):        self._queue = []        self._count = 0        self._cv = threading.Condition()    def put(self, item, priority):        with self._cv:            heapq.heappush(self._queue, (-priority, self._count, item))            self._count += 1            self._cv.notify()    def get(self):        with self._cv:            while len(self._queue) == 0:                self._cv.wait()            return heapq.heappop(self._queue)[-1]

1.4、队列异常

import queueq = queue.Queue()try:    data = q.get(block=False)except queue.Empty:    ...try:    item = ''    q.put(item, block=False)except queue.Full:    ...try:    data = q.get(timeout=5.0)except queue.Empty:    ...

二、JOIN方法的使用

from queue import Queuefrom threading import Thread_sentinel = object()def producer(out_q):    put_time = 0    while True:        data = 'hello world!'        out_q.put(data)        put_time += 1        if put_time == 5:            out_q.put(_sentinel)def consumer(in_q):    while True:        data = in_q.get()        print(f'get data is: {data}')        if data is _sentinel:            in_q.put(_sentinel)            break        in_q.task_done()q = Queue()t1 = Thread(target=consumer, args=(q,))t2 = Thread(target=producer, args=(q,))t1.start()t2.start()q.join()

三、线程监听

from queue import Queuefrom threading import Thread, Eventdef producer(out_q):    while True:                ...                evt = Event()        data = ''        out_q.put((data, evt))        ...                evt.wait()def consumer(in_q):    while True:        data, evt = in_q.get()                ...                evt.set()

四、线程间复制

from queue import Queuefrom threading import Threadimport copydef producer(out_q):    while True:                ...        data = ''        out_q.put(copy.deepcopy(data))def consumer(in_q):    while True:                data = in_q.get()                ...

  • 收藏
  • 评论
  • *举报

上一篇:Python从门到精通(六):线程-02-线程池

下一篇:Python从门到精通(五):文件处理-06-ini文件处理

Original: https://blog.51cto.com/arch/5415519
Author: 生而为人我很遗憾
Title: Python从门到精通(六):线程-03-线程间通信

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/513850/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python游戏引擎开发二_python制作galgame引擎(二)

    上一篇主要涉及的其实是我个人的一些初期目标,以及解决方式。虽然提了提Parser类的实现,但是代码毕竟不是主要讨论的对象。而且很明显的,上一篇几乎与galgame制作无关&#823…

    Python 2023年9月23日
    044
  • 玩转Python飞机大战项目

    文章目录 前言 一、代码下载及导入项目 二、安装相关依赖组件 * 1.安装pygame 2.安装pyinstaller 三、运行及打包 * 1、运行 2、打包成可执行文件。 总结 …

    Python 2023年9月22日
    052
  • DataFrame的数据处理笔记

    文章目录 * – 创建DataFrame – DF的特性和简单函数使用 – DF的遍历 – DF的修改 – + 修改行,…

    Python 2023年8月18日
    047
  • js打地鼠

    js经典项目打地鼠如何利用js来实现打地鼠呢? 首先是游戏页面的制作 0 开始游戏 游戏说明 游戏说明 在30秒内, 尽可能多的去打灰太狼, 每打1只灰太狼加10分, 每打1只小灰…

    Python 2023年9月19日
    057
  • python-生成数据

    文章目录 1 绘制简单折线图 * 1.1 绘制简单的折线图 1.2 修改图表 1.3 校正图形 1.4 使用内置样式 2 绘制散点图 * 2.1 使用scatter()绘制散点图并…

    Python 2023年8月31日
    058
  • GIt常用操作基础

    1、常用命令 2、Git常用命令流程图 3、Git配置 4、新项目推送流程(本地仓库—>远程仓库) 5、新项目克隆推送流程(远程仓库—>本地仓库) 6、本地仓库常用操作…

    Python 2023年6月11日
    065
  • scrapy mysql pipeline_ScrapyMySQL管道不保存数据

    使用MYSQl的链接和外部的链接来存储MYSQl。我在代码中使用了snippet。当我运行蜘蛛,我看到链接被取消,但给出错误2018-03-07 13:33:27 [scrapy….

    Python 2023年10月6日
    047
  • django+layui+js 动态获取复选框的值,前端上传及后端获取复选框的值

    自用运维平台的权限系统中有涉及到一个用户管理的功能,其中包含了用户的角色修改,用户和角色是多对多的关系,前端编辑界面的角色展示为了减少更新麻烦,采用动态从后端获取角色列表,这样后端…

    Python 2023年8月6日
    068
  • 【数据挖掘 | 可视化】 WordCloud 词云(附详细代码案例)

    🤵‍♂️ 个人主页: @计算机魔术师👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。 开发环&#…

    Python 2023年7月31日
    080
  • 数据合并聚合笔记

    文章目录 在pandas中类似的分组的操作 DataFrameGroupBy对象 简单的索引操作: 动手 在pandas中类似的分组的操作 df.groupby(by=&#8221…

    Python 2023年8月17日
    069
  • Python所有方向的学习路线图,让Python初学者少走弯路

    在放学习路线之前,我先来讲一下这个学习路线图有什么作用,避免有些新手看得云里雾里的。 学习路线图上面写的是某个方向建议学习和掌握的知识点汇总,举个例子,如果你要学习爬虫,那么你就去…

    Python 2023年7月31日
    046
  • 漫谈测试成长之探索——测试汇报

    作为测试工程师,我们为保障软件项目的质量付出了很多精力。但是,由于我们的工作内容所限制,相对于其他项目角色,我们在项目中很难输出比较直观的成果。又因为工作成果不明显,测试工程师容易…

    Python 2023年10月21日
    039
  • 线程.FTP.SFTP.打包

    Windows就是多线程模式. 每一个解决方案就是一个进程. 一个进程下拥有多个线程. 单核的处理器不存在多线程. 是CPU在每一个线程上切换处理. 在人反应不过来的情况下完成同步…

    Python 2023年6月6日
    072
  • pytest学习和使用2-初步使用和用例运行

    2 初步使用 1 测试脚本 2 脚本分析 * 2.1 断言使用assert 2.2 使用pytest运行用例规则 3 练习下用例运行规则 1 测试脚本 在 pytest_study…

    Python 2023年9月14日
    035
  • python数据分析三剑客之numpy模块

    目录 一、数组的创建 1、直接创建法 创建一维数组 创建多维数组 数组信息 数据类型 数据类型的转换 特殊数组的生成 改变数组形状 2、导入图片数据 二、索引与切片 1、索引 2、…

    Python 2023年8月27日
    047
  • python及pygame雷霆战机游戏项目实战10 爆炸效果

    在这个系列中,将制作一个雷霆战机游戏。 ; 自动开火 首先,让对玩家射击方式做一点改动。只要空格键被按下,让自动发射子弹。 为此,将向Player添加两个新属性: self.sho…

    Python 2023年9月21日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球