• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python多线程和队列操作实例

Python多线程和队列操作实例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python 多线程队列,python多线程实例,python 多线程,python多线程编程,python 线程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Python3,开一个线程,间隔1秒把一个递增的数字写入队列,再开一个线程,从队列中取出数字并打印到终端
#! /usr/bin/env python3

import time
import threading
import queue

# 一个线程,间隔一定的时间,把一个递增的数字写入队列
# 生产者
class Producer(threading.Thread):

    def __init__(self, work_queue):
        super().__init__() # 必须调用
        self.work_queue = work_queue
       
    def run(self):
        num = 1
        while True:
            self.work_queue.put(num)
            num = num+1
            time.sleep(1) # 暂停1秒

# 一个线程,从队列取出数字,并显示到终端
class Printer(threading.Thread):

    def __init__(self, work_queue):
        super().__init__() # 必须调用
        self.work_queue = work_queue

    def run(self):
        while True:
            num = self.work_queue.get() # 当队列为空时,会阻塞,直到有数据
            print(num)

def main():
    work_queue = queue.Queue()

    producer = Producer(work_queue)
    producer.daemon = True # 当主线程退出时子线程也退出
    producer.start()

    printer = Printer(work_queue)
    printer.daemon = True # 当主线程退出时子线程也退出
    printer.start()

    work_queue.join() # 主线程会停在这里,直到所有数字被get(),并且task_done(),因为没有调用task_done(),所在这里会一直阻塞,直到用户按^C

if __name__ == '__main__':
    main()
</div>
queue是线程安全的,从多个线程访问时无需加锁。
如果在work_queue.get()之后调用work_queue.task_done(),那么在队列空时work_queue.join()会返回。
这里work_queue.put()是间隔一定时间才往队列放东西,如果调用work_queue.task_done(),在数字1被get()后,队列空时,join()就返回,程序就结束了。
也就是程序只打印了1然后就退出了。
所以在这种使用情景下,不能调用task_done(),程序会一直循环下去。
https://docs.python.org/3/library/queue.html

</div>

您可能想查找下面的文章:

  • Python实现简单多线程任务队列
  • Python多线程结合队列下载百度音乐的方法
  • Python多线程和队列操作实例

相关文章

  • python机器学习库xgboost的使用
  • python在linux系统下获取系统内存使用情况的方法
  • python基础教程之五种数据类型详解
  • 用Python编写一个简单的Lisp解释器的教程
  • python 实现网上商城,转账,存取款等功能的信用卡系统
  • Python 冒泡,选择,插入排序使用实例
  • 深入理解Python中字典的键的使用
  • python用装饰器自动注册Tornado路由详解
  • Python的math模块中的常用数学函数整理
  • python删除文件示例分享

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python 的描述符 descriptor详解
    • python实现ping的方法
    • 一键搞定python连接mysql驱动有关问题(windows版本)
    • Python使用迭代器捕获Generator返回值的方法
    • 深入理解python对json的操作总结
    • 轻松掌握python设计模式之访问者模式
    • Python中的ctime()方法使用教程
    • Python模块学习 datetime介绍
    • Python实现求最大公约数及判断素数的方法
    • Python的Django框架中TEMPLATES项的设置教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有