欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

并发编程—开启进程的两种方式

程序员文章站 2024-03-23 23:12:16
...

进程与程序的区别

进程指的是正在执行的一个过程,是对正在进行程序的抽象概念。
程序仅仅是一堆代码而已。

多道技术

多道指的是多个程序,多道技术解决的是多个程序共用一个cpu的调度问题。一个cpu一次只能执行一个任务,执行任务过程中,如果执行时需要操作硬盘,那cpu等待的时间就比较长,这时可以让cpu去切换做其他的任务。
多道技术就是将内存分为几个部分,放不同的程序,当一个程序执行时间过长或者在等待 I/O时切换cpu做其他的任务,切换时间较短,所以看起来好像是多个程序同时运行了。

并发与并行的区别

并发是单个cpu+多道技术实现的并发,看起来是同时运行,实际上是伪并行。
并行是多个cpu,每个都可以用多道技术实现的同时运行。

开启进程的两种方式

用到的模块:multiprocessing

方式一:定义好需执行的函数,实例化Process对象时调用函数

from multiprocessing import Process
import time

def run(name):  # 定义了run函数
    print('%s is running' % name)
    time.sleep(3)



if __name__ == '__main__':  # windows 中Process() 必须放到下面!
    p1 = Process(target=run, args=('小明',))  # target 表示调用要执行的任务,args传参,元祖形式,单个参数必须加逗号,('小明',)
    p2 = Process(target=run, args=('小红',))

    p1.start()  # 调用start方法
    p2.start()

    print('主进程')
    
# 执行结果:说明主程序要创建子进程时给操作系统发了信号之后,就继续执行了,并没有等待子进程执行完毕,而子进程创建时也并非等一个执行完才创建另一个。

主进程
小明 is running
小红 is running

方法二:自定义类,继承Process,自定义方法,实例化对象调用方法

class MyProcess(Process):  # 继承类Process
    def __init__(self, name):
        super().__init__()  # 继承父类方法
        self.name = name

    def run(self):  # 必须是run方法,start才能调用,不然不执行
        print('%s is running' % self.name, os.getpid(), os.getppid())  # 查看子进程和父进程
        time.sleep(3)
        print('%s is done' % self.name)


if __name__ == '__main__':
    p1 = MyProcess('小明')
    p2 = MyProcess('小红')
    p1.start()
    p2.start()
    print('主进程序', os.getpid(), os.getppid())  # 当前程序的运行id,和当前软件的id (pycharm的进程号)



主进程序 12276 54868
小明 is running 40688 12276
小红 is running 35852 12276
小红 is done小明 is done