并发编程—开启进程的两种方式
程序员文章站
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
上一篇: Python备忘录
下一篇: Python备忘录模式