进程

进程

进程理论

# 进程与程序的区别
    程序:一堆代码(死的)
    进程:正在运行的程序(活的)
    
# 单核情况下的进程调度
    进程调度算法演变
        1.FCFS    先来先服务
            对短作业不友好
        2.短作业优先调度算法
            对长作业不友好
        3.时间片轮转法+多级反馈队列
            先分配给新的多个进程相同的时间片
            之后根据进程消耗的时间片多少分类别......
 
# 进程三状态图(******)
    就绪态 运行态 阻塞态
        进程要想进入运行态必须先经过就绪态
      
# 同步与异步(******)
    '''用于描述任务的提交方式'''
    同步:提交完任务之后原地等待任务的返回结果 期间不做任何事
    异步:提交完任务之后不原地等待任务的返回结果 直接去做其他事 结果由反馈机制自动提醒
      
# 阻塞与非阻塞(******)
    '''用于描述任务的执行状态'''
    阻塞:阻塞态
    非阻塞:就绪态 运行态

创建进程

# 代码层面创建进程

from multiprocessing import Process
import time
import os


def test(name):
    print(os.getpid())  # 获取进程号
    print(os.getppid())  # 获取父进程号
    print('%s正在运行' % name)
    time.sleep(3)
    print('%s已经结束' % name)


if __name__ == '__main__':
    p = Process(target=test, args=('jason',))  # 生成一个进程对象
    p.start()  # 告诉操作系统开设一个新的进程     异步提交
    print(os.getpid())
    print('')


"""
在windows中开设进程类似于导入模块
    从上往下再次执行代码
一定需要在__main__判断语句内执行开设进程的代码

在linux中是直接将代码完整的复制一份执行
    不需要在__main__判断语句内执行
"""


class MyProcess(Process):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        print('%s正在运行' % self.name)
        time.sleep(3)
        print('%s已经结束' % self.name)

if __name__ == '__main__':
    p = MyProcess('jason')
    p.start()
    print('')

进程的join方法

from multiprocessing import Process
import time


def test(name, n):
    print('%s is running' % name)
    time.sleep(n)
    print('%s is over' % name)


if __name__ == '__main__':
    p_list = []
    start_time = time.time()
    for i in range(1, 4):
        p = Process(target=test, args=(i, i))
        p.start()
        p_list.append(p)
        # p.join()  # 串行  9s+
    for p in p_list:
        p.join()
    print(time.time() - start_time)

    # p = Process(target=test, args=('jason',))
    # p1 = Process(target=test, args=('kevin',))
    # p2 = Process(target=test, args=('oscar',))
    # p.start()
    # p1.start()
    # p2.start()
    print('主进程')

进程间默认无法交互

# 进程间数据是相互隔离的
from multiprocessing import Process

money = 100


def test():
    global money
    money = 999


if __name__ == '__main__':
    p = Process(target=test)
    p.start()
    # 先确保子进程运行完毕了 再打印
    p.join()
    print(money)

进程的对象方法

1.current_process查看进程号

2.os.getpid() 查看进程号  os.getppid() 查看父进程进程号

3.进程的名字,p.name直接默认就有,也可以在实例化进程对象的时候通过关键字形式传入name=''

4.p.terminate()  杀死子进程 

5.p.is_alive()  判断进程是否存活    3,4结合看不出结果,因为操作系统需要反应时间。主进程睡0.1即可看出效果

 

posted @ 2022-01-13 18:40  XX_Bb  阅读(43)  评论(0编辑  收藏  举报