python 进程的使用001

进程类的简单使用

1、 多进程启动的方法一 在Windows操作系统下

# from multiprocessing import Process
# import time
#
# def task(msg, n):
#     print('进程 %s runnin'%msg)
#     time.sleep(n)
#     print('进程 %s downing ' % msg)
#
# if __name__ == '__main__':
#
#     # Process是类名,要进行实例化对象 进程,
#     # 进程对象需要参数属性,一个是任务名称和任务所需要的传参
#     # 传参有args 是以位置传参的方式进行 就是数据体是元组的,元素是字符串
#     # 传参有kwargs 是以有关键字传参 ,数据体是字典 ,
#     p1 = Process(target=task,args=('1',2))
#     p2 = Process(target=task,kwargs={'msg':'2','n':5})
#     p1.start()
#     p2.start()
#
#     print('主 进程 running ')





2、多进程启动的方法二 (在Windows操作系统下)

# from multiprocessing import Process
# import time
#
#
# # p1 = Process(target=task, args=('1', 2))
# # p2 = Process(target=task, kwargs={'msg': '2', 'n': 5})
#
# # 采用封装成自己的类名
#
# class MyProcess(Process):
#     '''
#     继承进程的父类初始化init函数
#     '''
#     def __init__(self,msg,n):
#         '''
#         先进行父类的初始化,把发送给操作系统创建进程的数据完成
#         实例化任务对象,同时把对象的属性参数传进来
#         :param msg:
#         :param n:
#         '''
#         super().__init__()
#         self.msg = msg
#         self.n = n
#
#     def run(self) -> None:
#         print('进程 %s runnin' % self.msg)
#         time.sleep(self.n)
#         print('进程 %s downing ' % self.msg)
#
#
#
#
# if __name__ == '__main__':
#     p1 = MyProcess(msg='子进程1',n=4)
#     # 实例化对象 拿到对象的句柄
#     p2 = MyProcess(msg='子进程2',n=3)
#     p1.start()
#     # 执行句柄的功能,为什么是start功能,不是run函数
#     # ,是因为要使用父类的功能start 发送创建进程的信号。这也是为甚么要初始化父类
#     p2.start()
#
#     print('主 进程 running ')




3、进程对象的方法 join

# 

from multiprocessing import Process
import time

def task(msg, n):
    print('进程 %s runnin'%msg)
    time.sleep(n)
    print('进程 %s downing ' % msg)

if __name__ == '__main__':
    p1 = Process(target=task, args=('1', 2))
    p2 = Process(target=task,kwargs={'msg':'2','n':5})

    # p1.start()
    # p1.join() # 子进程开启,并运行结束后,才继续运行其他代码
    #
    # p2.start()
    # p2.join()  # 子进程开启,并运行结束后,才继续运行其他代码

    # print('主 进程 running ')
    # 从现象看 程序是串行的


    p1.start()
    p2.start()
    # 现在的排布是子进程是并发的,同时发出了创建进行的指令,

    p1.join()
    p2.join()
    # join 的功能只能对主进程和 在其后的子进程影响 ,进程的执行是被操作系统接管了。
    # join的底层机制,简单讲就是不断的向操作系统进行询问子进程是否结束,如果结束就解锁进程。

    # 为甚么要用join ,就是为了能加快子进程运行完成后,快速的进行主进程的功能计算,没有join的功能,无法预测子进程的时间运行时间,导致代码不够优化。

    print('主 进程 running ')



4、 僵尸进程 和 孤儿进程 (unix系统)


# 僵尸进程 :
# 形成原因是 父进程创建子进程,父进程需要获取到子进程信息,所以会保留子进程的相关信息,这个子进程就是僵尸进程
# 解决  主进程在子进程运行完成后,即时使用join 进行资源回收。

# 孤儿进程 形成原因 父进程被被 kill ,子进程还活着,最后由init进程接管
posted @ 2022-01-24 08:48  mmszxc  阅读(31)  评论(0)    收藏  举报