Python中进程理解以及进程的创建

忍得一时之气,免得百日之忧。

在情绪冲动的情况下,做出的决策伤人伤己,总是让人追悔莫及。

能忍住自己的脾气,是一种修养,更是一种能力。

进程理论

1、什么是进程

进程是一个程序运行的过程

2、什么是程序

程序就是一堆代码文件

3、串行、并发、并行

  • 串行:多个任务依次运行,一个运行完毕再运行下一个
  • 并行:多个任务是真的在同时运行,只有多个cpu才有并行的概念
  • 并发:多个任务看起来是在同时运行

4、进程的创建

  • windows:CreateProcess
  • linux:fork

5、进程的终止

  1. 正常退出
  2. 被其他进程杀死(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
努力学习!
原文地址:https://www.cnblogs.com/Orange-YXH/p/13648095.html