Python中进程理解以及进程的创建
忍得一时之气,免得百日之忧。
在情绪冲动的情况下,做出的决策伤人伤己,总是让人追悔莫及。
能忍住自己的脾气,是一种修养,更是一种能力。
进程理论
1、什么是进程
进程是一个程序运行的过程
2、什么是程序
程序就是一堆代码文件
3、串行、并发、并行
- 串行:多个任务依次运行,一个运行完毕再运行下一个
- 并行:多个任务是真的在同时运行,只有多个cpu才有并行的概念
- 并发:多个任务看起来是在同时运行
4、进程的创建
- windows:CreateProcess
- linux:fork
5、进程的终止
- 正常退出
- 被其他进程杀死(taskill /F /PID 3333)
6、程序运行的三种状态
- 运行态
- 就绪态
- 阻塞态
优化程序效率的核心法则:降低IO操作(硬盘IO、网络IO)
内存》本地硬盘-》网络IO
7、总结
- 进程运行的三种状态:(运行态、就绪态)非阻塞态、阻塞态
- 调用任务的两种方式:同步调用、异步调用
进程的创建
我们需要导入Process 模块
from multiprocessing import Process
再自定义一个函数来模拟进程效果:
def task(n, tag):
print("%s is running" % tag) #进程
time.sleep(3) #运行时间
print("%s is done" % tag) #进程结束
接下来就是创建进程了:
if __name__ == '__main__':
p1 = Process(target=task, args=(5, "子进程1"))
p1.start()
我们需要注意的就是我们必须要在 main中建立进程。
完整版:
# 开启进程的方式一:
import time
import os
from multiprocessing import Process
def task(n, tag):
print("%s is running" % tag)
time.sleep(3)
print("%s is done" % tag)
if __name__ == '__main__':
p1 = Process(target=task, args=(5, "子进程1"))
p2 = Process(target=task, args=(3, "子进程2"))
p3 = Process(target=task, args=(2, "子进程3"))
p1.start()
p2.start()
p3.start()
print("主进程:%s" % os.getpid())
下面是运行结果:
主进程:6928
子进程2 is running
子进程1 is running
子进程3 is running
子进程2 is done
子进程3 is done子进程1 is done
我们在os模块中可以去得到进程的ID号:
代码如下:
os.getpid()
注意:
我们在运行代码的时候会出现结果与上述结果不一样,这个问题是正常的,因为我们的cpu处理不是同时处理而是接到指令以后(start())再开始创建,那就会出现,我cpu刚好来运行你们程序的时候刚好就遇到了进程p2,那我就先把他运行产生出来了,我再遇到别的我再去产生进程。
我们这里在讲一个用类的创建进程的方法:
import time
import os
from multiprocessing import Process
class Myprocess(Process):
def __init__(self,tag):
super().__init__()
self.tag = tag
def run(self) -> None:
print("%s is running" % self.tag)
time.sleep(3)
print("%s is done" % self.tag)
if __name__ == '__main__':
p1 = Myprocess("进程1")
p2 = Myprocess("进程2")
p3 = Myprocess("进程3")
p1.start() # p1.run()
p2.start() # p2.run()
p3.start() # p3.run()
print("主:%s。。。" % os.getpid())
运行结果:
主进程:12076
进程1 is running
进程2 is running
进程3 is running
进程1 is done
进程2 is done
进程3 is done
努力学习!