首页 > 编程语言 >Python使用 - 多线程

Python使用 - 多线程

时间:2023-08-01 23:34:59浏览次数:44  
标签:apple Python self threading num 线程 thread1 使用 多线程

常见术语及用法

 

基本使用

# 定义线程类
class MyThread(threading.Thread):
    def __init__(self):
        super(MyThread, self).__init__() # 或 threading.Thread.__init__(self)

    def run(self) -> None:
        tid = threading.currentThread().ident
        tname = threading.currentThread().getName()
        print("===== 线程开始: id: %d, name: %s" % (tid, tname))
        # 线程休眠
        time.sleep(5)
        print("===== 线程结束: id: %d, name: %s" % (tid, tname))

 
print("主线程: id: %d, name: %s" % (threading.currentThread().ident, threading.currentThread().name))

# 创建线程
thread1 = MyThread()
# 启动线程
thread1.start()
# 主线程等待thread1线程结束
thread1.join()

print("主线程退出")

 

线程同步

多个人从苹果箱子里取苹果吃(这个苹果箱比较特殊,类似抽奖箱,一次只能伸一只手进去,且规定一次只能拿一个苹果)

import threading
import time
import random

class AppleBox:
    def __init__(self, apple_num: int):
        self.apple_num = apple_num
        self.res_lock = threading.Lock()

    def get(self):
        while True:
            self.res_lock.acquire()
            tid = threading.currentThread().ident
            tname = threading.currentThread().getName()
            t_apple_num = self.apple_num
            print("===== 线程: id: %d, name: %s, 从箱子里拿到了%s号苹果, 走到边上开始吃苹果" % (tid, tname, t_apple_num))
            self.apple_num -= 1
            is_empty = self.apple_num <= 0
            self.res_lock.release()

            # 线程休眠, 模拟吃苹果时间
            time.sleep(random.randint(3, 5))
            print("===== 线程: id: %d, name: %s, 吃完%s号苹果" % (tid, tname, t_apple_num))
            if is_empty:
                break
            
            
class MyThread(threading.Thread):
    def __init__(self, apple_box: AppleBox):
        super(MyThread, self).__init__() # 或 threading.Thread.__init__(self)
        self.apple_box = apple_box

    def run(self) -> None:
        self.apple_box.get()


apple_box = AppleBox(5)
thread_list = []
for i in range(3):
    # 创建线程
    thread1 = MyThread(apple_box)
    # 启动线程
    thread1.start()
    thread_list.append(thread1)

# 主线程等待上面的线程执行完毕
for t in thread_list:
    t.join()

print("退出主线程")

 

参考
Java并发编程基础:线程与同步 - 知乎 (zhihu.com)

走进并发,线程同步与线程通信全解析 - 知乎 (zhihu.com)

Java 生产者和消费者3种实现方式_用java实现生产者消费者_小博要变强啊~的博客-CSDN博客

 

标签:apple,Python,self,threading,num,线程,thread1,使用,多线程
From: https://www.cnblogs.com/sailJs/p/17576747.html

相关文章

  • python ImportError: libGL.so.1: cannot open shared object file: No such file or
    前言python报错pythonImportError:libGL.so.1:cannotopensharedobjectfile:Nosuchfileordirectory这个错误通常表示你的Python程序需要使用OpenGL库,但是该库未安装或未正确配置。解决在LinuxUbuntu系统中,安装OpenGL库:sudoapt-getinstalllibgl1-mesa......
  • Python超实用!批量重命名文件/文件夹,只需1行代码
    大家好,这里是程序员晚枫,之前在小破站给大家分享了一个视频:批量重命名文件。最近在程序员晚枫的读者群里,发现很多朋友对这个功能很感兴趣,尤其是对下一步的优化:批量重命名文件夹。这周我利用下班时间,把这个功能改进了一下,增加了几个可选的功能,我们一起来看一下吧~批量重命名文件......
  • shell命令概述 Shell作用:命令解释器 介于操作系统内核与用户之间,负责解释命令行 获得
    shell命令概述Shell作用:命令解释器介于操作系统内核与用户之间,负责解释命令行获得命令帮助内部命令help命令的“--help”选项使用man命令阅读手册页命令行编辑的几个辅助操作Tab键:自动补齐反斜杠“\”:强制换行快捷键Ctrl+U:清空至行首快捷键Ctrl+K:清空至行尾快捷键Ctr......
  • 大厂原来都这么使用IDEA远程调试的!
    远程调试是一项重要的技术,特别是对于使用IDEA开发的开发者来说。在本篇技术博客中,我们将探讨如何使用IDEA进行远程调试。1IDEA配置首先,我们需要确保我们的开发环境已经准备就绪。我们需要在远程服务器上安装并配置好调试器,如GDB或LLDB。我们还需要在本地计算机上安装IDEA,并确保我......
  • python 灰世界白平衡算法
    白平衡是图像处理比较常见的一个概念,在采集图像的过程中,相机的感光元件或者镜头会对原始色彩造成影响,而白平衡技术通常可以用来校正这种光线和镜头对颜色影响。灰度世界算法(GrayWorld)假设认为,一幅彩色图像中,RGB三个通道的颜色平均值是趋于同一个灰度值K的,所以如果当前的通道的......
  • opencv-python 模板匹配
    模板匹配:在给定的图像中查找和模板最相似的区域。模板匹配类似于卷积,模板在原图上从左上角原点(0,0)开始滑动,计算模板与滑动窗口的差别程度,计算方法有6种,每次计算的结果放在一个矩阵中,最后输出差别程度的矩阵。原始图像为A*B,模板大小是a*b的话,输出的矩阵大小为:(A-a+1)*(B-b+1)。1模......
  • Flask使用sqlalchemy(1)
    Flask使用sqlalchemy(1)flask项目演示#运行步骤: 1pycharm打开项目2安装依赖:虚拟环境pipinstall-rreq.txt3在数据库创建库:movie#root用户密码不是123,改代码,两个地方4打开models.py解开注释,最上面两行注释掉,以脚本形式运行 命令行中:pythonmo......
  • 服务器管理工具(IPMI)以及ipmitool工具使用
    服务器管理工具(IPMI)概念介绍IPMIIPMI(IntelligentPlatformManagementInterface)是一项标准开放的硬件管理能力接口规范,由Intel、HP、Dell和IBM公司在1998年共同提出,其主要经历过版本1.0与1.5两代,目前最新版本为2.0。IPMI是一种可扩展的标准,它定义了如何监控硬件和......
  • Vector Packet Processor(VPP)使用简介
    [email protected],2023DescriptionVPP的简介以及安装简介最早的VPP是由Cisco提出来的,不过现在已经开源了。FD.io的VectorPacketProcessor(VPP)是一个快速、可扩展的2-4层多平台网络协议栈,可以运行多种架构的如x86\ARM\Power架构的Li......
  • 五分钟教你使用GitHub寻找优质项目
    https://www.cnblogs.com/Can-daydayup/p/17581307.html 思维导航前言首先解决访问慢的问题GitHub热门栏目GitHub上直接搜项目GitHub搜索小技巧前言经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项......