Python多线程thread与threading实现

2023-10-27

Python多线程thread与threading实现

python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。

python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。

这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。

threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。

一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。

我们来看看这两种做法吧。

Python thread实现多线程

 
def thread_main(a):
    global count, mutex
    # 获得线程名
    threadname = threading.currentThread().getName()
 
    for x in xrange(0, int(a)):
        # 取得锁
        mutex.acquire()
        count = count + 1
        # 释放锁
        mutex.release()
        print threadname, x, count
        time.sleep(1)
 
def main(num):
    global count, mutex
    threads = []
 
    count = 1
    # 创建一个锁
    mutex = threading.Lock()
    # 先创建线程对象
    for x in xrange(0, num):
        threads.append(threading.Thread(target=thread_main, args=(10,)))
    # 启动所有线程
    for t in threads:
        t.start()
    # 主线程中等待所有子线程退出
    for t in threads:
        t.join()  
 
 
if __name__ == '__main__':
    num = 4
    # 创建4个线程
    main(4)

Python threading来实现多线程

#-*- encoding: gb2312 -*-
import threading
import time
 
class Test(threading.Thread):
    def __init__(self, num):
        threading.Thread.__init__(self)
        self._run_num = num
 
    def run(self):
        global count, mutex
        threadname = threading.currentThread().getName()
 
        for x in xrange(0, int(self._run_num)):
            mutex.acquire()
            count = count + 1
            mutex.release()
            print threadname, x, count
            time.sleep(1)
 
if __name__ == '__main__':
    global count, mutex
    threads = []
    num = 4
    count = 1
    # 创建锁
    mutex = threading.Lock()
    # 创建线程对象
    for x in xrange(0, num):
        threads.append(Test(10))
    # 启动线程
    for t in threads:
        t.start()
    # 等待子线程结束
    for t in threads:
        t.join()  



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python多线程thread与threading实现 的相关文章

  • xlrd.biffh.XLRDError:Excel xlsx 文件;不支持[重复]

    这个问题在这里已经有答案了 我正在尝试使用读取启用宏的 Excel 工作表pandas read excel与 xlrd 库 它在本地运行良好 但是当我尝试将其推送到 PCF 时 我收到此错误 2020 12 11T21 09 53 441
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • boto3 资源(例如 DynamoDB.Table)的类型注释

    The boto3库提供了几种返回资源的工厂方法 例如 dynamo boto3 resource dynamodb Table os environ DYNAMODB TABLE 我想注释这些资源 以便我可以获得更好的类型检查和完成 但我
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • Python 声音(“铃声”)

    我想让一个 python 程序在完成任务时通过发出嘟嘟声来提醒我 目前 我使用import os然后使用命令行语音程序说 进程完成 我更愿意它是一个简单的 铃 我知道有一个函数可以用于Cocoa apps NSBeep 但我认为这与此没有太
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • 为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件

    我已经在服务器上设置了 postfix 以及 openDKIM 当我跑步时 echo Testing setup mail s Postfix test my email address 我收到电子邮件 邮件标题中有一个DKIM Signa
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • Python 通过从现有 csv 文件中过滤选定的行来写入新的 csv 文件

    只是一个问题 我试图将 csv 文件中的选定行写入新的 csv 文件 但出现错误 我试图读取的 test csv 文件是这样的 两列 2013 9 1 2013 10 2 2013 11 3 2013 12 4 2014 1 5 2014
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 走进包装类

    引入 Java认为一切皆对象 引用数据类型就是对象 但是在Java中8中基本数据类型不是对象 只是表示一种数据的类型形式 Java为了一切皆对象的思想统一 把8中基本数据类型转换成对应的类 这个类称为基本数据类型的包装类 基本数据类型 包装
  • vue运行后没有显示内容

    运行成功没有报错但是就是不显示内容 进浏览器看到控制台的报错信息 vue runtime esm js c320 4573 Vue warn Property or method yzmStr is not defined on the i
  • 如何使用cookie信息,完成自动登录

    在做爬虫任务的时候 我们常常会遇到很多网页必须登录后 才可以开放某些页面 所以登录是爬取网页的第一步 但是 通过post表单 包含用户名和密码 的方法 对于那些不需要输入比较复杂的验证码的网页 可以使用正则表达式将验证码和验证码的ID匹配得
  • MMEditing环境配置

    MMEditing环境配置 MMEditing is an open source image and video editing toolbox based on PyTorch It is a part of the OpenMMLab
  • ZynqMP Petalinux2021.1设置工程离线编译

    前言 Ubuntu18 04安装Petalinux 2021 1 sudaroot的博客 CSDN博客 介绍 PetaLinux基于Yocto 每次创建或者编译工程下载都需要联网下载工程所需文件 且下载的文件非常庞大 这就导致编译速度还受网
  • 《Python量化投资》01 量化投资之单因子测试(概述,Pandas的适用)

    一 股票aplha多因子策略介绍 量化投资是指通过数量化方式及计算机程序化发出买卖指令 以获取稳定收益为目的的交易方式 在海外的发展已有30多年的历史 其投资业绩稳定 市场规模和份额不断扩大 得到了越来越多投资者认可 从全球市场的参与主体来
  • C#简单操作MongoDB

    新建一个窗体程序 使用Nuget安装mongodb driver 或者直接引用dll如下 代码 using System using System Collections Generic using System ComponentMode
  • Shader编程学习笔记(二)—— Shader和渲染管线

    http www cnblogs com maple share p 5395097 html Shader和渲染管线 什么是Shader Shader 中文翻译即着色器 是一种较为短小的程序片段 用于告诉图形硬件如何计算和输出图像 过去由
  • i2c

    I2C是由Philips公司发明的一种串行数据通信协议 仅使用两根信号线 SerialClock 简称SCL 和SerialData 简称SDA I2C是总线结构 1个Master 1个或多个Slave 各Slave设备以7位地址区分 地址
  • 使用Python3解压gz、tar、tgz、zip、rar五种格式的压缩文件例子

    使用Python3解压如下五种压缩文件 gz tar tgz zip rar 简介 gz 即gzip 通常只能压缩一个文件 与tar结合起来就可以实现先打包 再压缩 tar linux系统下的打包工具 只打包 不压缩 tgz 即tar gz
  • Chrome-网页另存为单个网页文件后,单个网页文件无法正常显示的问题

    通过Chrome浏览器另存单个网页文件 再次打开出现时出现下图效果 将存储的单个网页文件的扩展名由html修改为mhtml即解决该问题
  • 数据库的可伸缩性的探索

    数据库的可伸缩性的探索 Author skate Time 2009 5 30 数据库在当今社会越来越重要 尤其对于一个发展迅速的企业 其数据是爆炸式的发展 为了适应其数据的发展 对数据库的架构体系设计要求也越来越高 它要可以方便的线形扩展
  • Windows 安装pdf2image运行后遇到PDFInfoNotInstalledError解决办法

    最近在学习图像处理 需要安装pdf2image 安装没有报错 运行之后报错 pdf2image exceptions PDFInfoNotInstalledError Unable to get page count Is poppler
  • UE4_运行模式下(Runtime)样条曲线(Spline)新增Point导致Length变长

    Spline 在运行模式下新增一个point引发的问题 问题描述 在Spline曲线之间增加一个Point 导致Spline的Length变长 产生的原因 Spline 之前本身具有2个Point 博主想通过鼠标点击的方式在曲线之间产生一个
  • WebAPI中使用Autofac (过滤器的注册)

    第一步 在webAPI中安装 Autofac WebApi2 不要错误的安装Autofac Mvc5 也不要错误的安装Autofac WebApi 因为Autofac WebApi是给webapi1的 否则会报错 重写成员 Autofac
  • Sqlite中使用SQL与其他数据库的区别

    Sqlite作为Android中的主流数据库而广为使用 但是他的sql语言与一般的大型数据库所使用的SQL语言还是有一些区别的 本文总结如下 1 TOP 在SQL Server中 我们使用TOP来获取前N条数据 SELECT TOP 10
  • 解决QT程序发布时的dll依赖问题

    在QT程序发布时 往往需要解决程序中的DLL动态链接库的依赖问题 否则 因为开发机器的运行环境和客户机器不一样 因此到了客户那里可能会出现缺少DLL的问题 qt creator windows操作系统 visual studio 2015
  • Educoder–Java面向对象(第七章+第八章)- Java中的异常与文件类【笔记+参考代码】

    Educoder Java面向对象 第七章 第八章 Java中的异常与文件类 笔记 参考代码 一 Java中的异常 一 第一关 1 在Java中 源文件Test java中包含如下代码段 则程序编译运行结果是 B public class
  • 图形库LVGL v8.2版本移植

    图形库LVGL v8 2版本移植 环境 硬件 前提准备 下载图形库代码 图形开发中的字体转换 图片转换 GUI GUIDER 图形化开发lvgl 移植 加入相关源代码到工程中 提供时钟信号给lvgl 使用GUI Guider 生成代码 并加
  • Python多线程thread与threading实现

    Python多线程thread与threading实现 python是支持多线程的 并且是native的线程 主要是通过thread和threading这两个模块来实现的 python的thread模块是比较底层的模块 python的thr