首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python 多线程 queue先进先出队列(并行编程 8)

python 多线程 queue先进先出队列(并行编程 8)

作者头像
用户5760343
发布于 2019-07-30 03:04:18
发布于 2019-07-30 03:04:18
72600
代码可运行
举报
文章被收录于专栏:sktjsktj
运行总次数:0
代码可运行

from queue import Queue import random import threading import time

Producer thread

class Producer(threading.Thread): def init(self, t_name, queue): threading.Thread.init(self, name=t_name) self.data = queue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def run(self):
    for i in range(5):
        print("%s: %s is producing %d to the queue!" % (time.ctime(), self.getName(), i))
        self.data.put(i)
        time.sleep(random.randrange(10) / 5)
    print("%s: %s finished!" % (time.ctime(), self.getName()))

Consumer thread

class Consumer(threading.Thread): def init(self, t_name, queue): threading.Thread.init(self, name=t_name) self.data = queue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def run(self):
    for i in range(5):
        val = self.data.get()
        print("%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getName(), val))
        time.sleep(random.randrange(10))
    print("%s: %s finished!" % (time.ctime(), self.getName()))

Main thread

def main(): queue = Queue() producer = Producer('Pro.', queue) consumer = Consumer('Con.', queue) producer.start() consumer.start() producer.join() consumer.join() print('All threads terminate!')

if name == 'main': main()

import queue

q = queue.Queue(3) # 调用构造函数,初始化一个大小为3的队列 print(q.empty()) # 判断队列是否为空,也就是队列中是否有数据

入队,在队列尾增加数据, block参数,可以是True和False 意思是如果队列已经满了则阻塞在这里,

timeout 参数 是指超时时间,如果被阻塞了那最多阻塞的时间,如果时间超过了则报错。

q.put(13, block=True, timeout=5) print(q.full()) # 判断队列是否满了,这里我们队列初始化的大小为3 print(q.qsize()) # 获取队列当前数据的个数

block参数的功能是 如果这个队列为空则阻塞,

timeout和上面一样,如果阻塞超过了这个时间就报错,如果想一只等待这就传递None

print(q.get(block=True, timeout=None))

queue模块还提供了两个二次封装了的函数,

q.put_nowait(23) # 相当于q.put(23, block=False) q.get_nowait() # 相当于q.get(block=False)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.07.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python多线程学习
1、  函数式:调用thread模块中的start_new_thread()函数来产生新线程。如下例:
流柯
2018/08/30
3610
py基础---多线程、多进程、协程
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程中并发执行不同的任务。
py3study
2020/01/16
7010
py基础---多线程、多进程、协程
Python:线程、进程与协程(3)——
    Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式。该模块提供了三种队列:
py3study
2020/01/03
4630
一篇文章理清Python多线程之同步条件,信号量和队列
今天这篇文章大概介绍下python多线程中的同步条件Event,信号量(Semaphore)和队列(queue),这是我们多线程系列的最后一篇文章,以后将会进入python多进程的系列。
南山烟雨
2019/04/30
8880
一篇文章理清Python多线程之同步条件,信号量和队列
八、线程和进程 什么是线程(thread)?什么是进程(process)? 线程和进程的区别?Python GIL(Global Interpreter Lock)全局解释器锁
什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 一个线程是一个执行上下文,它是一个CPU需要执行一系列指令的所有信息。 假设你正在读一本书,你现在想休息一下,但是你希望能够回来,从你停止的地方继续阅读。实现这一目标的一种方法是记下页码、行号和字号。所以你读一本书的执行上下文是这三个数字。 如果你有一个室友,而且她使用的是同样的技术,她可以在你
酱紫安
2018/04/16
2.1K0
Python35 events(事件)
队列的作用: 1、解耦:避免两者之间的过度依赖,以免其中一方出现问题,另一方不能再执行。 2、效率:增加数据处理的效率。
py3study
2020/01/06
4860
Python35  events(事件)
Python多线程编程
  一个串行程序需要从每个I/O终端通道来检测用户的输入,然而程序在读取过程中不能阻塞,因为用户输入的到达时间的不确定,并且阻塞会妨碍其他I/O通道的处理。由于串行程序只有唯一的执行线程,因此它需要兼顾执行的多个任务,确保其中的某个任务不会占用过多的时间,并对用户的响应时间进行合理的分配。这种任务类型的串行程序的使用,往往造成非常复杂的控制流,难以维护。
py3study
2020/01/07
5190
python多线程
线程模块 Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。 _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法: threading.currentThread(): 返回当前的线程变量。 threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动
Alan_1
2023/05/05
4830
Python| 队列 Queue
本文算是一次队列的学习笔记,Queue 模块实现了三种类型的队列,它们的区别仅仅是队列中元素被取回的顺序。在 FIFO 队列中,先添加的任务先取回。在 LIFO 队列中,最近被添加的元素先取回(操作类似一个堆栈)。优先级队列中,元素将保持排序( 使用 heapq 模块 ) 并且最小值的条目第一个返回。
用户1278550
2019/08/19
1.1K0
Python| 队列 Queue
python队列Queue
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递
周小董
2019/03/25
1.1K0
python线程及多线程(果断收藏)
之前做了一个有关数据处理的项目,一个源文件大概20G(超大文件),我的计算机内存只有8G,在第一步读取文件时内存直接就爆了,后来总结了俩种方法:
用户5745385
2019/07/04
1.2K0
python线程及多线程(果断收藏)
python线程、协程
如果同一时间有多个线程操作同一数据可能会出现混乱现象,所以需要加线程锁保证同一时间只有一个线程操作这一数据,保证数据一致性
py3study
2020/01/13
3320
11.python线程
基本概念 1.进程 定义:  进程就是一个程序在一个数据集上的一次动态执行过程。 组成:  进程一般由程序、数据集、进程控制块三部分组成。 程序:  我们编写的程序用来描述进程要完成哪些功能以及如何完成; 数据集: 则是程序在执行过程中所需要使用的资源; 进程控制块: 用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志 2.线程     线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程
zhang_derek
2018/04/11
6030
Python学习记录-多进程和多线程
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
py3study
2020/01/07
8260
python多线程
使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
py3study
2020/01/19
9260
Python教程第8章 | 线程与进程
在进程中,又可以创建一些线程,他们共享这些内存空间,并由操作系统调用,以便并行计算。
仲君Johnny
2024/01/24
2060
Python教程第8章 | 线程与进程
Python使用Queue对象实现多线程同步小案例
queue模块的Queue对象实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进行信息交换的场合,实现了多线程编程所需要的所有锁语义。 Queue对象主要实现了put()和get()方法,分别用来往队列尾部追加元素和在队列头部获取并删除元素。这两个方法都允许指定超时时间,其用法分别为put(item, block=True, timeout=None)和get(block=True, timeout=None) 在下面的代码中,自定义了生产者线程类和消费者线程类,生产者生产随机数量个元素并放置到队列
Python小屋屋主
2018/04/16
9130
行云流水间:队列的妙用与任务分配(python queue)
众所周知,在编程的世界里,数据结构作为程序员的一把利剑,能够帮助我们高效地处理和组织数据。数据结构主要分为线性结构和非线性结构两类。常见的数据结构包括数组、链表、栈、队列、树和图等。每种数据结构都有其独特的特点和适用场景,正确选择和应用能够极大地提高程序的效率和性能。
测试蔡坨坨
2024/04/18
1.2K0
行云流水间:队列的妙用与任务分配(python queue)
python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02
基本方法:q.put(元素) q.get() q.get_nowait() q.full() q.empty()
suwanbin
2019/09/26
6280
python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02
【Python基础编程】深入掌握线程与线程池的高效应用
上篇文章讲述的是python的异常处理和文件读写,这篇文章讲述python的并发编程:线程。
易辰君
2024/11/07
2160
【Python基础编程】深入掌握线程与线程池的高效应用
推荐阅读
相关推荐
Python多线程学习
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验