day37 进程理论 多进程

# import os
# import time
# print(os.getpid())
# print(os.getppid())
# time.sleep(100)
import os
import time
from multiprocessing import Process  # 进程模块
#
# def func():
#     time.sleep(2)
#     print('in func',os.getpid(),os.getppid())
#
#
# if __name__ == '__main__':
#     print('in main',os.getpid(),os.getppid())
#     p1 = Process(target=func)  # 进程对象
#     p1.start()  # 向操作系统提交了一个开启子进程的申请
#     p2 = Process(target=func)  # 进程对象
#     p2.start()  # 向操作系统提交了一个开启子进程的申请
#     print('主进程 的 代码执行结束了')
# 原理
# if __name__ == '__main__':
    # 使用python都是调用操作系统的命令来启动进程
    # 同样使用python 不同的操作系统的操作是不同的
    # 对于windows来说 必要加if __name__ == '__main__':
    # 对于linux ios来说 不必要加if __name__ == '__main__':
# 给子进程传参数
# def func(num):
#     time.sleep(2)
#     print('in func',num,os.getpid(),os.getppid())
#
#
# if __name__ == '__main__':
#     print('in main',os.getpid(),os.getppid())
#     p1 = Process(target=func,args=(1,))  # 进程对象
#     p1.start()  # 向操作系统提交了一个开启子进程的申请
#     p2 = Process(target=func,args=(2,))  # 进程对象
#     p2.start()  # 向操作系统提交了一个开启子进程的申请
#     print('主进程 的 代码执行结束了')
# 其他方法和属性
# 1.开启多个子进程
# def func(num):
#     print('in func',num,os.getpid(),os.getppid())
#
# if __name__ == '__main__':
#     print('in main',os.getpid(),os.getppid())
#     for i in range(10):
#         p = Process(target=func,args=(i,))
#         p.start()  # start不是运行一个程序,而是调用操作系统的命令,要创建子进程
#     print('主进程 的 代码执行结束了')
# 2.join方法
# def func(num):
#     time.sleep(1)
#     print('in func',num,os.getpid(),os.getppid())
#
# if __name__ == '__main__':
#     print('in main',os.getpid(),os.getppid())
#     p = Process(target=func,args=(1,))
#     p.start()  # start不是运行一个程序,而是调用操作系统的命令,要创建子进程
#     p.join()   # 阻塞,直到p这个子进程执行完毕之后再继续执行
#     print('主进程 的 代码执行结束了')
# 3.一批任务使用join
def func(num):
    print('in func',num,os.getpid(),os.getppid())
if __name__ == '__main__':
    print('in main',os.getpid(),os.getppid())
    p_l = []
    for i in range(10):
        p = Process(target=func,args=(i,))
        p.start()  # start不是运行一个程序,而是调用操作系统的命令,要创建子进程,非阻塞
        p_l.append(p)
    print(p_l)
    for p in p_l :
        p.join() # 阻塞,直到p这个子进程执行完毕之后再继续执行
    print('主进程 的 代码执行结束了')
# 4.is_alive terminate
# def func(num):
#     time.sleep(2)
#     print('in func',num,os.getpid(),os.getppid())
#
#
# if __name__ == '__main__':
#     print('in main',os.getpid(),os.getppid())
#     p1 = Process(target=func,args=(1,))  # 进程对象
#     p1.start()  # 向操作系统提交了一个开启子进程的申请
#     print(p1.is_alive())  # 检测进程是否在执行任务
#     p1.terminate()   # 强制结束子进程 - 非阻塞
#     print(p1.is_alive())  # 检测进程是否在执行任务
#     print('主进程 的 代码执行结束了')
# 用面向对象的方式开启子进程
# class MyProcess(Process):
#     def __init__(self,num):
#         super().__init__()
#         self.num = num
#     def run(self):
#         print('in run ',self.num,os.getpid(),os.getppid())
#
# if __name__ == '__main__':
#     print('in main ', os.getpid(), os.getppid())
#     p = MyProcess(1)
#     p.start()
# 守护进程
posted @ 2018-07-24 15:59  山东张铭恩  阅读(150)  评论(0编辑  收藏  举报