返回顶部
首页 > 资讯 > 后端开发 > Python >python模块学习(queue模块的Q
  • 161
分享到

python模块学习(queue模块的Q

模块pythonqueue 2023-01-31 07:01:40 161人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

学习版本3.5.2 PriorityQueue类和LifoQueue类继承Queue类然后重写了_init、_qsize、_put、_get这四个类的私有方法 Queue:先进先出队列的同步实现,通过双向列表实现的 # Initi

学习版本3.5.2

PriorityQueue类和LifoQueue类继承Queue类然后重写了_init、_qsize、_put、_get这四个类的私有方法

Queue:先进先出队列的同步实现,通过双向列表实现的

    # Initialize the queue representation
    def _init(self, maxsize):
        self.queue = deque()

    def _qsize(self):
        return len(self.queue)

    # Put a new item in the queue
    def _put(self, item):
        self.queue.append(item)

    # Get an item from the queue
    def _get(self):
        return self.queue.popleft()

PriorityQueue:优先队列的同步实现,通过堆实现

    def _init(self, maxsize):
        self.queue = []

    def _qsize(self):
        return len(self.queue)

    def _put(self, item):
        heappush(self.queue, item)

    def _get(self):
        return heappop(self.queue)

LifoQueue:后进先出队列的同步实现,通过list来实现的

    def _init(self, maxsize):
        self.queue = []

    def _qsize(self):
        return len(self.queue)

    def _put(self, item):
        self.queue.append(item)

    def _get(self):
        return self.queue.pop()


__init__(self, maxsize=0) 初始化队列长度,maxsize为0的时候长度为无限

empty(self) 返回队列是否为空

full(self) 返回队列是否为满

qsize(self) 返回队列的大小(并不可靠)

get(self, block=True, timeout=None) 从队头获取并删除元素,block为true:timeout为None时候,阻塞当前线程直到队列中有可用元素;timeout为非负时候,等了timeout的时间还没有可用元素时候抛出一个Empty异常;block为false:timeout为None时候,队列为空则抛出Empty异常;timeout为非负时候,等待timeout时候后没有可用元素则抛出Empty异常。

get_nowait(self) #return self.get(block=False)

put(self, item, block=True, timeout=None) 在队尾插入一个元素,block为true:timeout为None时候,阻塞当前线程直到队列中有可用位置;timeout为非负时候,等了timeout时间还没有可用位置时候抛出一个Full异常;block为false:timeout为None时候,队列没有位置则抛出Full异常;timeout为非负时候,等待timeout时候后还是没有可用位置则抛出Full异常。

put_nowait(self, item) #return self.put(item, block=False)

join(self) 阻塞当前线程直到队列的任务全部完成了

task_done(self) 通知队列任务的完成情况,当完成时候唤醒被join阻塞的线程


实验代码

#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2

import threading
import time
import queue

que = queue.Queue(5)
#que = queue.PriorityQueue(5)
#que = queue.LifoQueue(5)

def que_put(item):
    que.put(item)
    print("put", item)
    time.sleep(1)

def que_get():
    item = que.get()
    print("get", item)
    que.task_done()

def que_join():
    que.join()
    print("task was done")

if __name__ == "__main__":
    putthreadlist = []
    getthreadlist = []
    tlist = [4,5,6,1,2,3]
    for i in tlist:
        putthreadlist.append(threading.Thread(target=que_put,args=(i,)))
    for i in range(6):
        getthreadlist.append(threading.Thread(target=que_get))


    for tl in putthreadlist:
        tl.start()

    threading.Thread(target=que_join).start()

    for tl in getthreadlist:
        tl.start()

    print("main")

运行结果

put 4
put 5
put 6
put 1
put 2
get 4
put 3
get 5
get 6
get 1
get 2
get 3
main
task was done

que = queue.PriorityQueue(5)时候的运行结果

put 4
put 5
put 6
put 1
put 2
get 1
put 3
get 2
get 3
get 4
get 5
get 6
main
task was done

que = queue.LifoQueue(5)时候的运行结果

put 4
put 5
put 6
put 1
put 2
get 2
put 3
get 3
get 1
get 6
get 5
get 4
main
task was done

--结束END--

本文标题: python模块学习(queue模块的Q

本文链接: https://lsjlt.com/news/191541.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python模块学习(queue模块的Q
    学习版本3.5.2 PriorityQueue类和LifoQueue类继承Queue类然后重写了_init、_qsize、_put、_get这四个类的私有方法 Queue:先进先出队列的同步实现,通过双向列表实现的 # Initi...
    99+
    2023-01-31
    模块 python queue
  • python模块学习----nmap模块
    安装nmap模块:pip install python_nmanmap模块说明:python-nmap是一个帮助使用nmap端口扫描器的python库。它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理...
    99+
    2023-01-31
    模块 python nmap
  • Python模块学习之IPy模块
    IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第...
    99+
    2023-01-31
    模块 Python IPy
  • Python -- Queue模块
    学习契机 最近的一个项目中在使用grpc时遇到一个问题,由于client端可多达200,每个端口每10s向grpc server发送一次请求,server端接受client的请求后根据request信息更新数据库,再将数据库和配置文件的某...
    99+
    2023-01-31
    模块 Python Queue
  • Python 模块学习
        模块学习: http://wsyht90.blog.51cto.com/9014030/1845737 1、getpass 2、os 3、sys 4、subprocess 5、hashlib 6、json 7、pickle 8、sh...
    99+
    2023-01-31
    模块 Python
  • python模块学习
    系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.st...
    99+
    2023-01-31
    模块 python
  • python hashlib模块学习
    目录 hashlib 模块 破解密码 hmac 模块 1.干嘛用的: 对字符进行加密,其实就是一个自定义的字符编码表,...
    99+
    2023-01-31
    模块 python hashlib
  • python模块学习(1)
    模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。模块也是Python对象,具有随机的名字属性用来绑定或引用。简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变...
    99+
    2023-01-31
    模块 python
  • python学习-re模块
    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面我主要总结了re的常用方法。1.re的简介    使用python...
    99+
    2023-01-31
    模块 python
  • Python学习-pycurl模块
    pycurl是一个用c语言编写的libcurl Python实现,功能非常强大,支持操作协议有FTP,HTTP,HTTPS,TELNET等。模块的常用方法说明:close()方法,对应libcurl包中的curl_easy_cleanup方...
    99+
    2023-01-31
    模块 Python pycurl
  • python optparse模块学习
    本文参考:http://docs.python.org/2/library/optparse.htmlPython 有两个内建的模块用于处理命令行参数:一个是 getopt,getopt只能简单处理 命令行参数。另一个是 optparse,...
    99+
    2023-01-31
    模块 python optparse
  • Python pycurl模块 学习
    pycurl模块的安装方法如下: easy_install pycurl #easy_install安装方法 pip install pycurl #pip安装方法 #源码安装方法 # 要求curl-config包支持,需要源码方式重新安...
    99+
    2023-01-31
    模块 Python pycurl
  • python学习-smtplib模块
     python的stmplib模块可以实现邮件的发送功能,可以模拟一个smtp客户端。在python2.3或者更高版本默认自带smtplib模块,无需额外安装。一、smtplibi模块的常用类与方法    smtp类定义:smtplib([...
    99+
    2023-01-31
    模块 python smtplib
  • python学习-psuti模块
    psutil(进程和系统实用程序)是一个跨平台的库,用于 在Python中检索有关运行进程和系统利用率(CPU,内存,磁盘,网络,传感器)的信息。它主要用于系统监视,分析和限制流程资源以及运行流程的管理。它实现了UNIX命令行工具提供的许多...
    99+
    2023-01-31
    模块 python psuti
  • python学习-OS模块
    OS模块是python内建模块,主要是对大量文件和大量路径进行操作os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'...
    99+
    2023-01-31
    模块 python OS
  • Python学习—json模块
    json模块 四个常用方法 son.dumps() 将python对象编码成为json的字符串格式(最常用的是字典,列表集合等都可以) json.dump() 将python对象编码成为json的字符串格式并写入文件 json...
    99+
    2023-01-31
    模块 Python json
  • Python模块学习--email
    可以使用Python的email模块来实现带有附件的邮件的发送。 SMTP (Simple Mail Transfer Protocol)   邮件传送代理 (Mail Transfer Agent,MTA) 程序...
    99+
    2023-01-31
    模块 Python email
  • Python wmi 模块的学习
    # -*- coding:utf-8 -*- import datetime import os import wmi import time import _winreg import pythoncom import threadin...
    99+
    2023-01-31
    模块 Python wmi
  • [python模块]队列queue
    一、队列queue队列queue 多应用在多线程场景,多线程访问共享变量。对于多线程而言,访问共享变量时,队列queue的线程安全的。因为queue使用了一个线程锁(pthread.Lock()),以及三个条件变量(pthread.cond...
    99+
    2023-01-31
    队列 模块 python
  • Python学习—paramiko模块实
    paramiko模块 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 import paramiko # ssh root@ip # 创建一个ssh对象 ...
    99+
    2023-01-31
    模块 Python paramiko
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作