#并发编程 # 处理系统:多道、分时、实时。 #进程:运行中的程序。计算机中可供分配的最小单位。 #三大状态:创建-->就绪 --> 运行-->退出 # 阻塞(运行时遇到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()
py6.11
猜你喜欢
转载自www.cnblogs.com/liujjpeipei/p/9168362.html
今日推荐
周排行