1.进程是什么?
进程是加载内存里面正在运行的程序,一定要是在运行的哈,没事在纸上写了一段代码,那个只是程序,不是进程。
其他的说法自己去翻操作系统
2.用函数方法创建进程 口水话见代码
1 from multiprocessing import Process 2 import os 3 4 5 def func(args1): 6 print("hello world") 7 print("func进程PID:%s,以及父进程PID:%s" % (os.getpid(), os.getppid())) 8 print("我是主进程创建我的时候传递进来的参数:", args1) 9 """ 10 讲道理 主进程开辟了一个新空间 创建了一个新进程 这里面运行的是func函数 11 那么 控制台是不应该输出的 因为子进程是在后台执行 但是编译器帮我们做了优化 12 所以子进程的内容也在控制台打印了 13 """ 14 15 16 # 这个if是在Windows操作系统里面才有的 17 if __name__ == "__main__": 18 # 注册一个进程 这里面需要注意的是传递的参数是元组 只有一个参数要加逗号 19 p = Process(target=func, args=(1,)) 20 p.start() 21 print("我是在前面异步执行") 22 p.join() # 感知子进程p结束 23 print("=" * 10) 24 print("主进程ID是", os.getpid()) 25 """ 26 我是在前面异步执行 27 hello world 28 func进程PID:2144,以及父进程PID:1496 29 我是主进程创建我的时候传递进来的参数: 1 30 ========== 31 主进程ID是 1496 32 """
3.用类方法创建进程
1 from multiprocessing import Process 2 import os 3 4 5 class MyProcess(Process): 6 def __init__(self, name, age): 7 super().__init__() 8 self.name_str = name 9 self.age = age 10 11 def run(self): 12 print(self.name) 13 print(self.pid) 14 print(self.name_str, self.age) 15 16 # def start(self): 17 # self.run() 18 # 传参数的继承类里面的init方法 19 20 21 if __name__ == "__main__": 22 # 对象实例化 23 p1 = MyProcess("张三", "年芳18") 24 p1.start() 25 p2 = MyProcess("李四", "二十有四") 26 p2.start() 27 p1.join() # 感知主进程结束 28 p2.join() 29 print("主进程:", os.getpid()) 30 """ 31 MyProcess-1 32 5832 33 张三 年芳18 34 MyProcess-2 35 1468 36 李四 二十有四 37 主进程: 6220 38 """
4.锁机制 这里面需要在py文件同目录新建文件夹 放入内容“{"ticket": 5}”
1 import json 2 import time 3 from multiprocessing import Process 4 from multiprocessing import Lock 5 6 7 def show(i): 8 with open("ticket", mode="r", encoding="utf-8") as f: 9 s = json.load(f) 10 print("第%s人查询:还有%s张票" % (i, s["ticket"])) 11 12 13 def buy_ticket(num, lock): 14 lock.acquire() 15 time.sleep(0.1) 16 with open("ticket", mode="r", encoding="utf-8") as t: 17 dic = json.load(t) 18 # print(s) 19 if dic["ticket"] > 0: 20 dic["ticket"] -= 1 21 print("%s买到票了" % num) 22 else: 23 print("%s没买到票" % num) 24 25 with open("ticket", "w", encoding="utf-8") as f: 26 json.dump(dic, f, ensure_ascii=False) 27 f.close() 28 lock.release() 29 30 31 if __name__ == "__main__": 32 # for i in range(10): 33 # p = Process(target=show, args=(i,)) 34 # p.start() 35 lock = Lock() 36 37 for i in range(10): 38 p = Process(target=buy_ticket, args=(i, lock)) 39 p.start() 40 """ 41 2买到票了 42 8买到票了 43 6买到票了 44 4买到票了 45 5买到票了 46 9没买到票 47 0没买到票 48 3没买到票 49 7没买到票 50 1没买到票 51 """
5.事件
1 import time 2 import random 3 from multiprocessing import Event, Process 4 5 6 def cars(i, e): 7 if not e.is_set(): 8 print("%s在等待" % i) 9 e.wait() 10 print("%s通过" % i) 11 12 13 def light(e): 14 while True: 15 if e.is_set(): 16 e.clear() 17 print('