1 """ 2 如何开启一个进程 3 if __name__ == '__main__':原理 4 main 的原理 它是分配资源的 5 os 6 Process 7 fun 8 用对象开启一个进程,需要再次开启资源, 9 import 父进程文件 10 加main的话就不用开一个又开一个进程,在Windows中的时候。 11 在linux系统中运行的话 12 copy了一份父进程中的东西 13 14 父进程与子进程之间的关系 15 父进程要负责回收子进程的资源 16 父进程结束 17 子进程结束后父进程才结束 18 父进程结束,父进程代码显示结束了但是代码不会运行结束,会先回收子进程的资源,子进程结束后父进程才结束 19 两个print先打印结束 20 21 进程有什么特点? 22 空间数据是完全隔离的,进程跟进程之间是隔离的不共享的 23 返回值 不可以 子进程中的东西是返不回去的 24 25 join 26 27 面向对象开启进程 28 """ 29 30 import os 31 import time 32 # print(os.getpid()) # 运行的那一刻就是当前py文件的进程号,她的父id是pycharm的id 33 # print(os.getppid()) 34 from multiprocessing import Process 35 36 n = 10 37 38 39 def fun(num): 40 global n 41 n = 100 42 # print("我得id是%s,父id是%s" % (os.getpid(), os.getppid())) # 我得id是19876,父id是20532 43 print(num) 44 print("小明") 45 46 47 # fun() 48 # print(n) # 100 49 50 51 if __name__ == '__main__': 52 # print("我得id是%s,父id是%s" % (os.getpid(), os.getppid())) # 打印出来的是当前py的id 我得id是20532,父id是12012 53 p = Process(target=fun, args=[2]) # 实例化对象,元组是一个元素的话一定要加逗号 54 p.start() # 开启子进程 55 print("结束") 56 print(n) # 10 57 58 """ 59 第二部分向下开始 60 join方法 61 """ 62 import os 63 import time 64 import random 65 from multiprocessing import Process 66 67 68 # 以下是同步效果 69 def fun(num): 70 print("%s号小明发邮件" % (num)) 71 72 73 if __name__ == '__main__': 74 for i in range(10): # 开十个进程 75 p = Process(target=fun, args=(i,)) # 实例化对象 76 p.start() # 开始子进程 77 p.join() # 阻塞,等子进程结束 78 print("发送结束") 79 80 81 # 以下是异步效果 82 def fun(num): 83 print("%s号小明发邮件" % (num)) 84 85 86 if __name__ == '__main__': 87 list = [] # 来一个空列表放新添加的对象 88 for i in range(10): # 先循环此代码,开启所有的进程,循环十次,下面执行十次相当于创建十个进程 89 p = Process(target=fun, args=(i,)) # 实例化对象,元组一个元素的时候必须加逗号 90 p.start() # 开始子进程 91 list.append(p) # 把每个对象添加在列表中,之后在进行阻塞 92 for j in list: # 再循环此代码,按执行完的顺序阻塞 93 j.join() # 阻塞,直到子进程执行完毕 94 print("发送结束") # 最后打印结束