python进程和线程(05)

2023-09-20 18:06:50

python进程和线程(05)

1 python进程和线程

1.1 进程和线程概念

参考视频:黑马保姆级视频

进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个
运行进程,并分配进程ID方便系统管理。
线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同
的工作,是进程的实际工作最小单位。

进程就好比一家公司,是操作系统对程序进行运行管理的单位
线程就好比公司的员工,进程可以有多个线程(员工),是进程实际的工作者
操作系统中可以运行多个进程,即多任务运行
一个进程内可以运行多个线程,即多线程运行

注意点:

进程之间是内存隔离的,即不同的进程拥有各自的内存空间。这就类似于不同的公司拥有不同的办公场所。
线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。
这就好比,公司员工之间是共享公司的办公场所。

在这里插入图片描述

1.2 并行执行

并行执行的意思指的是同一时间做不同的工作。
进程之间就是并行执行的,操作系统可以同时运行好多程序,这些程序都是在并行执行。
除了进程外,线程其实也是可以并行执行的。
也就是比如一个Python程序,其实是完全可以做到:
。一个线程在输出:你好
。一个线程在输出:Hello
像这样一个程序在同一时间做两件乃至多件不同的事情,我们就称之为:多线程并行执行

1.3 核心使用语法_threading模块

绝大多数编程语言,都允许多线程编程,Pyhton也不例外。
Python的多线程可以通过threading模块来实现。

import threading

thread_obj=threading.Thread([group [, target [, name [, args [, kwargs]]]]])

    group: 暂时无用,未来功能的预留参数
    target: 执行的目标任务名
    args: 以元组的方式给执行任务传参
    kwargs: 以字典方式给执行任务传参
    name: 线程名,一般不用设置

#启动线程,让线程开始工作
thread_obj.start()

1.4 多线程编程

在这里插入图片描述

1.4.1 案例单线程不能满足情况如下:
import time

def sing():
    while True:
        print("我在唱歌,啦啦啦...")
        time.sleep(1)

def dance():
    while True:
        print("我在跳舞,呱呱呱....")
        time.sleep(1)

if __name__ == '__main__':
    sing()
    dance()

打印:

在这里插入图片描述

1.4.2 多线程
1.4.2.1 多线程创建语句
import  threading

sing_thread = threading.Thread( target=sing )  
dance_thread= threading.Thread( target=dance )  

sing_thread.start()  #启动线程1
dance_thread.start() #启动线程2
1.4.2.2 案例
import time
import  threading

def sing():
    while True:
        print("我在唱歌,啦啦啦...")
        time.sleep(1)

def dance():
    while True:
        print("我在跳舞,呱呱呱....")
        time.sleep(1)

if __name__ == '__main__':
	# 创建线程1,需要指定目标target,注意方法名不带括号
    sing_thread = threading.Thread( target=sing )  
     # 创建线程2,需要指定目标target,注意方法名不带括号
    dance_thread= threading.Thread( target=dance )  

    sing_thread.start()  #启动线程1
    dance_thread.start() #启动线程2
1.4.2 多线程传参使用
1.4.2.1 多线程传参使用 args 和 kwargs
thread_obj=threading.Thread([group [, target [, name [, args [, kwargs]]]]])

args: 以元组的方式给执行任务传参,注意参数是元组,如:args=("元素1",) ;元组点号,结束
kwargs: 以字典方式给执行任务传参,注意参数是字典类型,如: kwargs={"msg":"我在跳舞"} 
1.4.2.2 使用案例
import time
import  threading

def sing(msg):
    while True:
        print(msg)
        time.sleep(1)

def dance(msg):
    while True:
        print(msg)
        time.sleep(1)

if __name__ == '__main__':

    # 创建线程1,传参,注意:(args是元组类型,结尾有,)
    sing_thread = threading.Thread( target=sing, args=("我在唱歌",) )
    # 创建线程2,传参,注意:(kwargs是字典类型)
    dance_thread= threading.Thread( target=dance, kwargs={"msg":"我在跳舞"} )

    sing_thread.start()  #启动线程1 
    dance_thread.start() #启动线程2
更多推荐

【计算机网络】网络编程接口 Socket API 解读(7)

Socket是网络协议栈暴露给编程人员的API,相比复杂的计算机网络协议,API对关键操作和配置数据进行了抽象,简化了程序编程。本文讲述的socket内容源自Linuxman。本文主要对各API进行详细介绍,从而更好的理解socket编程。sendsend()遵循POSIX.1-2008MSG_CONFIRM是Linu

400电话-400电话申请-400电话办理开通服务中心

随着企业竞争的日益激烈,提供优质的客户服务成为企业成功的关键。而在客户服务中,电话联系是最常用的方式之一。为了满足企业的需求,400电话应运而生。本文将介绍400电话的申请、办理和开通服务中心,帮助企业了解如何获得高效的客户服务。首先,申请400电话是非常简单的。企业只需联系当地的电信运营商或400电话服务提供商,提供

短剧解说小程序搭建,短剧解说小程序源码

短剧解说小程序搭建,短剧解说小程序源码可定制开发小程序,H5,APP等系统有需要可定制可出源码,这个是啥你懂的(VVVVVVVVVVV):二五四九七八九零五九需要源码或搭建可看上面的数字信息短剧解说小程序搭建小程序使用uniapp开发服务端技术Java开发SpringBoot,mysql,redis,mybatis,T

MySQL与Oracle的分页

MySQL与Oracle的分页当我们通过SQL去查询一个结果集的时候,并不需要查看所有行,可能只是查看前几行,或者中间的几行。则需要像MySQL的limit或Oracle的ROWNUM与FETCHNEXT来实现。MySQL语法SELECT*FROMtable_nameLIMIT[offset,]row_count;LI

oracle中的minus数据比对

1、要有唯一索引或者主键作为前提,减少数据冲突的数量。2、当有in查询的时候,尽量用exists,这样能提高查询效率:createtableTF_F_USER_DIFF1tablespaceBD_TBS_EXP_DATAparallel20asselect/*+parallel(c,20)/*fromTF_F_USER

PostgreSQL 数据备份&恢复

文章目录PostgreSQL备份方式SQL备份(逻辑备份)文件系统备份(物理备份)归档备份(物理备份)逻辑备份&恢复物理备份&恢复(全量)备份恢复物理备份&恢复(某个时间点)场景具体操作PostgreSQL备份方式防止数据丢失的第一道防线就是备份。数据丢失有的是硬件损坏,还有人为的误删之类的,也有BUG的原因导致误删数

宝塔面板日志和缓存占用磁盘空间很大,如何清理?

服务器使用的宝塔面板,最近发现服务器的“系统盘”快爆满了,点面板上日志管理都要收费,我也不是很懂服务器的运维,使用ai进行询问,得到了解决:/var/log日志目录运行下面的命令查找是哪些目录占用空间很大du-h--max-depth=1我这边是/var/log和var/cache两个目录占用空间很大,进入/var/l

网络安全(黑客)自学

前言我是去年8月22日才正式学习网络安全的,因为在国营单位工作了4年,在广东一个月工资只有5000块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。而且国营单位的气氛是你干的多了,领导觉得你有野心,你干的不多,领导却觉得你这个人不错。我才24周岁,实在的受不了这种工作氛围,情绪已经压制了很多久,一

对象的创建过程

对象的创建过程基于两个方面回答这个问题:①jvm加载和分配内存。②java对象初始化。1.在实例化一个对象的时候,JVM首先会去检查目标对象是否已经被加载并初始化了。2.如果没有,JVM需要立刻去加载目标类,然后调用目标类的构造器完成初始化。①目标类的加载是通过类加载器来实现的,主要就是把一个类加载到内存里。②然后初始

PyQt学习笔记-使用QSettings保存系统配置参数

目录1.QSettings简介2.初始化QSettings及数据存储位置2.1使用系统api存储2.2存储成配置文件2.2.1使用文件格式设置2.2.2Format格式说明3Qsettings的使用3.1QSettings的数据保存和读取3.1.1使用setValue方法保存数据3.1.2使用value方法获取配置文件

flutter聊天界面-TextField输入框实现@功能等匹配正则表达式展示高亮功能

flutter聊天界面-TextField输入框实现@功能等匹配正则表达式展示高亮功能一、简要描述描述:最近有位朋友讨论的时候,提到了输入框的高亮展示。在flutterTextField中需要插入特殊样式的标签,比如:“请@张三回答一下”,这一串字符在TextField中输入,当输入@时弹出好友列表选择,然后将“@张三

热文推荐