python进程和线程大全

本文详细介绍了Python中的多进程和多线程。多进程是指操作系统同时执行的多个程序,它们之间数据独立,互不影响。通过Process类可以创建子进程,使用进程池可以更有效地管理进程。多线程则在同一程序内部创建的多个执行路径,共享内存空间,适合用于执行并发任务。队列是进程间通信的一种方式,提供先进先出的数据结构。线程同步是解决线程间数据竞争问题的关键。
摘要由CSDN通过智能技术生成

多进程和多线程

操作系统

操作系统是我们普通人为了操控计算机而出现的一个中间件。是我们普通人的福音,如果没有操作系统,计算机将会让百分之九十的人感觉好高端,剩下百分之八的人用的云里雾里,最后百分之二的人独自陶醉。什么?你说我数据这么出来的?我自己幻想的,我有兰博基尼,我年薪五百万,全靠我睡觉做梦。

多任务

我们肯定都拥有自己的电脑或者用过电脑。如果你没有用过电脑,请先去玩侠盗猎车,暴力摩托,cs1.5,cs1.6这些经典游戏,回来在看我的这篇文章,答应我,好不好?

当我在网上冲浪的时候,我会首先打开QQ微信,打开音乐,顺便打开浏览器。浏览完一天的新闻之后,我会去打游戏,这个时候音乐是一直播放的,QQ微信也是一直在持续通信的。这个时候就是一个多任务的情况。

多进程

我们电脑上打开的一个个软件,就是一个进程,他们是互相独立,互不影响的。由于cpu的执行速度特别快,你会感觉他们在同时运行一样。这就跟我们百米冲刺一样,大家跑的基本都差不多快,你根本发现不了谁快谁慢,同时运行一样。

程序是一个指令的集合

进程就是正在运行的程序

我们打开QQ跟网易云音乐,这就是两个进程,包括全局变量,他们互不影响。

多进程的基本结构

from multiprocessing import Process  #导入Process包
#创建主进程
if __name__ == "__main__":  #windows必须写这一行来判断是否是当前文件,如果不是会报错。max不需要写
    p1 = Process() #创建子进程
    p1.start() #子进程启动
    p1.join() #父进程等待子进程执行完毕之后在执行
    print(p1.pid)

程序刚开始运行的时候,会创建一个主进程,也就是我们当前的.py文件。然后在windows里面必须的判断是不是在当前文件里面,然后才可以创建子进程,进行一些操作。

子进程依赖于主进程,如果主进程结束,程序将会退出。

__name__ == "__main__"

python的文件有两种执行方式,第一种是直接作为程序执行,第二种是导入到其他python程序中被当作模块执行

__name__表示当前模块的名字,__name__ == "__main__",判断是不是当前文件,只有在当前文件下才会执行,在其他文件是不会执行的

在windows上,子进程是会自动Import启动他的这个文件,而在Import的时候是会执行这些语句的,如果不加这段代码,就会递归创建子进程。所以必须用if把他保护起来,只启动一次

Process

Process类来创建一个子进程

Process(target = ,name,args = (元组))

target表示调用对象,即子进程要执行的任务

name:子进程的名称

args:表示调用对象的位置参数元组

进程名.pid:子进程在系统中的pid

Process方法

p.start():启动进程,并调用该子进程中的run()方法

p.run():进程启动时运行的方法,正是他去调用target指定的参数,我们自定义的类中一定要实现该方法

p.terminate():强制终止进程,不会进行任何清理操作

p.is_alive():用来判断进程是否存在

p.join():主进程等待子进程终止,里面的参数可选超时时间

Process常用属性

name: 当前进程实例别名, 默认为Process-N, N为从1开始递增的整数;

pid: 当前进程实例的PID值

全局变量在多个进程中不共享,进程 之间的数据是独立的,默认情况互不影响
#全局变量在多个进程中是互不影响的,进程之间的数据是独立的
from multiprocessing import Process
num = 10 #全局变量
def func1():
    global num
    num += 10
    print("func1 = " + str(num))

def func2():
    global num
    num += 100
    print("func2 = " + str(num))

if __name__ == "__main__":
    p1 = Process(target=func1)
    p2 = Process(target=func2)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
创建新的进程还能够使⽤类的⽅式, 可以⾃定义⼀个类, 继承Process类, 每次实例化这个类的时候, 就等同于实例化⼀个进程对象
# 创建新的进程还能够使⽤类的⽅式, 可以⾃定义⼀个类, 继承Process类, 每次实例化这个类的时候, 就等同于实例化⼀个进程对象
from multiprocessing import Process

class MyPro(Process):

    def run(self):  #子进程start之后就会自动执行run
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值