py6.11

#并发编程
# 处理系统:多道、分时、实时。
#进程:运行中的程序。计算机中可供分配的最小单位。
#三大状态:创建-->就绪 --> 运行-->退出
#                   阻塞(运行时遇到input或sleep等时,变成阻塞状态)
#                   阻塞状态后一定回到就绪状态等待时间片再次轮转调用。
#os.getpid():得到当前进程
#os.getppid():得到当前进程的父进程
#创建进程
import os
from multiprocessing import Process  #Process是一个包,相当于一个模块。


# def func(num): #创建一个函数,作为子进程中调用的方法。
#     print('子进程:',os.getpid(),'子进程的父进程:',os.getppid())
#     print(num)
#
# if __name__ == '__main__':#当运行进程时,创建了一个子进程,进程与下面要创建的子进程没有关系。在windows系统中,进入子
# #进程最开始时需要引入父进程模块,引入父进程模块会自动执行父进程中的程序,再次创建子进程,为防止这种循环,用
# # if __name__ == '__main__'语句,只在当前进程运行时才创建子进程。(linux系统不会有这种引入父进程模块的情况。)
#     print('当前进程:',os.getpid(),'父进程:',os.getppid())
#     p = Process(target=func,args = (666,)) #创建一个对象,target接收子进程中的函数名。args关键字接收一个可迭代对象参数。
#                                            #可以是元组形式,只有一个元素时后面必须要加逗号,否则就是元素本身的类型,不是
#                                            #可迭代对象了。
#     p.start()  #开启一个子进程。异步,操作系统会安排何时执行子进程。
#     print('父进程代码结束')#先于子进程执行前执行,顺序执行快于操作系统的安排。

#父进程等待所有子进程结束后再打印结束语(阻塞:join):
# def func(num):
#     print(num)
#     print(num * '-')
#
# if __name__ == '__main__':
#     lis = [] #创建一个空列表,放每一次增加的进程对象。然后循环将每一个对象阻塞。
#              #这样就阻止了每一个子进程创建结束后自动往下执行代码。
#     for i in range(10):
#         p = Process(target=func,args=(i,))
#         p.start()     #循环创建10个子进程,但是顺序无法控制,遵循异步原理。
#         lis.append(p)
#     for p_lis in lis:
#         p_lis.join()
#     print('结束!')  #前面循环列表将每一个进程对象阻塞,等到所有都执行结束之后再执行这行代码。

#进程与进程的关系:
#1.父进程与子进程之间没有关系。
#2.父进程与子进程之间的数据是独立的:
# n = 0
# def func():
#     global n
#     n = 100        #子进程中将n重新赋值:n = 100.但是不改变父进程中的n值。
#
# if __name__ == '__main__':
#     p = Process(target=func)
#     p.start()
#     print(n)
#父进程是等待子进程都执行结束后再回收子进程的资源。
#不能直接获取子程序的返回值。
#利用面向对象创建进程:
# class Myprocess(Process): #一定要继承Process为父类。
#     def __init__(self,name):   #用来传参
#         super().__init__()     #用父类中的方法,必须要super()
#         self.name = name
#     def run(self):        #必须是run方法。
#         print(os.getpid(),os.getppid())
#         print(self.name)
#
# if __name__ == '__main__':
#     p = Myprocess('alex')
#     p.start()
进程、创建进程

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9168362.html
今日推荐