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

Python3中多线程编程的队列运作示例

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

goldensun 通过本文主要向大家介绍了python3 线程,python3 线程池,python3 多线程,python3多线程爬虫,队列指挥位置示例等相关知识,希望对您有所帮助,也希望大家支持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(),程序会一直循环下去。

</div>

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

  • Python3实现并发检验代理池地址的方法
  • Python3实现并发检验代理池地址的方法
  • python实现线程池的方法
  • Python实现线程池代码分享
  • Python3中多线程编程的队列运作示例
  • 用Python实现一个简单的线程池

相关文章

  • Python中函数参数设置及使用的学习笔记
  • 简单的连接MySQL与Python的Bottle框架的方法
  • 处理Python中的URLError异常的方法
  • python操作MySQL数据库的方法分享
  • 总结python爬虫抓站的实用技巧
  • 详细介绍Ruby中的正则表达式
  • python发送邮件示例(支持中文邮件标题)
  • python实现自动重启本程序的方法
  • python模拟enum枚举类型的方法小结
  • python批量修改文件后缀示例代码分享

文章分类

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

最近更新的内容

    • python通过索引遍历列表的方法
    • Python中文分词工具之结巴分词用法实例总结【经典案例】
    • python实现下载文件的三种方法
    • python操作MySQL数据库的方法分享
    • windows系统中python使用rar命令压缩多个文件夹示例
    • python daemon守护进程实现
    • 深入解析Python中的上下文管理器
    • Python 爬虫学习笔记之多线程爬虫
    • pyenv命令管理多个Python版本
    • Python中处理字符串之islower()方法的使用简介

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

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