python线程(进程子单位)

news2024/11/29 10:47:12

进程是由CPU给分配的执行单元,比较消耗空间和内存

创建、使用线程

import threading

# 进程
# 线程
from time import sleep


def download():
    list1 = ["girl.png", "boy.png", "child.png"]
    for l in list1:
        print(l)
        sleep(1.5)
        print("下载{}成功!".format(l), end='\n')


def listen():
    list1 = ["爱情买卖", "大风吹", "小米"]
    for l in list1:
        print("正在听{}成功!".format(l), end='\n')
        sleep(1.5)


if __name__ == '__main__':
    t1 = threading.Thread(target=download)
    t2 = threading.Thread(target=listen)

    t1.start()
    t2.start()

    n = 1
    while True:
        if n == 100:
            break
        sleep(1.5)
        print(n)
        n += 1

线程的状态

线程共享全局变量

import threading
from multiprocessing import Process
from time import sleep

money = 1000


def run1():
    global money
    for i in range(100):
        money -= 1


def run2():
    global money
    for i in range(100):
        money -= 1


if __name__ == '__main__':
    p1 = threading.Thread(target=run1)
    p2 = threading.Thread(target=run2)

    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print(money)

线程同步(加锁/lock/rlock/GIL)

python解释器会在创建线程的时候默认加锁(GIL全局解释器锁)

import threading
import random
import time

lock = threading.Lock()
list1 = [0] * 10


def task1():
    lock.acquire()
    for i in range(len(list1)):
        list1[i] = i
        time.sleep(0.5)
    lock.release()


def task2():
    lock.acquire()
    for i in range(len(list1)):
        print(list1[i])
        time.sleep(0.5)
    lock.release()


if __name__ == '__main__':
    t1 = threading.Thread(target=task1)
    t2 = threading.Thread(target=task2)
    t2.start()
    t1.start()
    print("over~~~~~")
    t1.join()
    t2.join()
    print(list1)

死锁

import threading
import random
import time

lock1 = threading.Lock()
lock2 = threading.Lock()


def task1():
    print("任务一")
    if lock1.acquire():
        print("Lock1--->任务1")
        time.sleep(2.5)
        if lock2.acquire(timeout=2):
            print("Lock2--->任务1")
            time.sleep(2.5)
        lock1.release()


def task2():
    print("任务二")
    if lock2.acquire():
        print("Lock2--->任务2")
        time.sleep(2.5)
        if lock1.acquire(timeout=2):
            print("Lock1--->任务2")
            time.sleep(2.5)
        lock2.release()


if __name__ == '__main__':
    t1 = threading.Thread(target=task1)
    t2 = threading.Thread(target=task2)
    t2.start()
    t1.start()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThinkPad T14 2023评测|thinkpad t14 gen4

一、购买地址 我在淘宝、京东、联想商城、苏宁易购都看了看,最终确定了在抖音官方商城买电脑,主要是价格低,足足少了四百,还送了一个电脑包和一个鼠标。 二、硬件信息 2.1 内存 这个运行内存比较有意思,我还是第一次买…

前端JavaScript

文章目录 一、JavaScript概述JS简介1.ECMAScript和JavaScript的关系2.ECMAScript的历史3.什么是javas?4.JavaScript的作用? 三者之间的作用JS基础1.注释语法2.引入js的多种方式3.结束符号 变量与常量变量1.JavaScript声明2.var与let的区别常量 基本数据类…

【Linux进程】再谈软件—操作系统(Operator System)

目录 操作系统(Operator System) 概念 设计OS的目的 如何理解 "管理"——先描述再组织 系统调用和库函数概念 总结 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。 笼统的理解,操作系统…

206. 反转链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

Springboot+shiro,完整教程,带你学会shiro

您的第一个 Apache Shiro 应用程序 引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

一文深入了解 CPU 的型号、代际架构与微架构

在 10 月 16 号的时候&#xff0c;Intel 正式发布了第 14 代的酷睿处理器。但还有很多同学看不懂这种发布会上发布的各种 CPU 参数。借着这个时机&#xff0c;给大家深入地讲讲 CPU 的型号规则、代际架构与微架构方面的知识。 CPU 在整个计算机硬件中、技术体系中都算是最最重…

关于pytorch张量维度转换及张量运算

关于pytorch张量维度转换大全 1 tensor.view()2 tensor.reshape()3 tensor.squeeze()和tensor.unsqueeze()3.1 tensor.squeeze() 降维3.2 tensor.unsqueeze(idx)升维 4 tensor.permute()5 torch.cat([a,b],dim)6 torch.stack()7 torch.chunk()和torch.split()8 与tensor相乘运算…

嵌入式Linux系统的闪存设备和文件系统学习纪要

嵌入式Linux系统的闪存设备和文件系统学习纪要 Linux下的文件系统结构如下&#xff1a; NAND Flash 是一种非易失性存储器&#xff08;Non-Volatile Memory&#xff09;&#xff0c;常用于闪存设备和固态硬盘&#xff08;SSD&#xff09;中。以下是几种常见的 NAND Flash 种类&…

234. 回文链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天分享一些包括但不限于计算机基础、算法等相关的知识点&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&#x1f4d6;是你想要的&#x1f497; ⛽️今…

iptables 与 firewalld

iptables 一、主机型&#xff08;包过滤防火墙&#xff09; 1、简介&#xff1a; 包过滤型防火墙是一种网络安全设备或软件&#xff0c;它工作在 2、3、4 层&#xff0c;通过检查网络数据包的源地址、目标地址、协议、端口等信息&#xff0c;根据预定义的规则来决定是否允许…

垃圾回收GC

为什么要有垃圾回收? JVM之所以要有垃圾回收,是因为它能够自动管理内存,避免内存泄漏和内存溢出的问题,垃圾回收机制会自动检测和清理不再使用的对象,释放内存空间,使得开发者不需要手动管理内存,降低了开发难度和错误风险,同时,垃圾回收还可以优化内存分配,提高程序性能和响…

1985-2020年我国30m土地利用覆盖数据介绍

土地覆盖(LC)决定了地球各圈层之间的能量交换、水和碳循环。准确的 LC 信息是环境和气候研究的基本参数。考虑到在过去几十年中&#xff0c;随着经济建设的发展&#xff0c;中国发生了巨大的变化&#xff0c;连续和精细的 LC 监测是迫切需要的。然而&#xff0c;目前&#xff0…

File类、方法递归

File:代表文本 IO流&#xff1a;读写数据 1、 File 类构建对象的方式是什么样的&#xff1f; File 的对象可以代表哪些东西&#xff1f; 注意 File 对象既可以代表文件、也可以代表文件夹。 ● File 封装的对象仅仅是一个路径名&#xff0c;这个路径可以是存在的&#xff0c…

JavaScript从入门到精通系列第二十七篇:详解JavaScript中的包装类

大神引荐&#xff1a;作者有幸结识技术大神孙哥为好友获益匪浅&#xff0c;现在把孙哥视频分享给大家 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻JavaS…

uniapp 查看安卓第三方插件抛出的异常

0.安装好andriod studio 和hbuilder 1.配置环境变量 鼠标右键此电脑-》设置》关于》高级系统设置》环境变量》系统变量》path中加入 具体的hbuildr adb目录看个人 2.在cmd中输入命令adb version 查看是否配置成功 出现版本号就是配置成功了 3.去hbuilder中&#xff0c;导航栏运…

04.Oracle的体系架构

Oracle的体系架构 一、主要组件 一、主要组件 下面是一张网图&#xff0c;大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件&#xff1a;实例&#xff08;Instance&#xff09;、数据库&#xff08;Database&#xff09;、表空间&#xff…

Kafka保证百万级数据写入和重发问题

Kafka作为当下流行的高并发消息中间件&#xff0c;大量用于数据采集&#xff0c;实时处理等场景&#xff0c; 那么它如何做到百万级写入速度呢?我们在享受它带来的高并发&#xff0c;高可靠等便利时&#xff0c;同时不得不面对可能存在的问题&#xff0c;项目中最常见的就是丢…

【KMP算法,数组】

文章目录 KMP算法数组数组的抽象类型定义数组的顺序存储三维数组 KMP算法 KMP算法设计思想&#xff1a; 利用已经部分匹配的结果而加快模式串的滑行速度&#xff0c;且主串S的指针i不必回溯&#xff0c;可提速到O(nm)&#xff1b; 定义next[j]函数&#xff0c;表明当模式中第j…

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…

Qwt 使用QwtDial绘制汽车仪表盘

1.概述 QwtDial是Qwt库中的一个类&#xff0c;用于绘制一个可旋转的仪表盘。 以下是类继承关系&#xff1a; 2.常用方法 void setOrigin(double origin) 设置仪表盘的原点角度&#xff0c;以度为单位&#xff0c;默认为0度&#xff0c;正值为逆时针旋转&#xff0c;负值为顺时…