multiprocessing子进程模块
一:进程ID
import os,time print(os.getpid(),os.getppid()) # getpid process id 获取当前进程号 # getppid parent process id 获取当前父进程号 time.sleep(20) print(os.getpid()) # 子进程和父进程之间的关系 # pycharm启动了py文件 # py文件就是子进程 # pycharm就是父进程
二:multiproecssing 模块示例
# import multiprocessing # 这是个包 import os from multiprocessing import Process def son_process(): '''这个函数中的代码是在子进程中执行的''' print('执行我啦',os.getpid(),os.getppid()) if __name__ == '__main__': # son_process的外面是一个主进程 print('1 -->',os.getpid()) p = Process(target=son_process) p.start()
三:开启子进程。实现一个并发的 socket
server端
# server端 import socket,time from multiprocessing import Process def talk(conn): conn, addr = sk.accept() while True: msg = conn.recv(1024).decode() time.sleep(10) conn.send(msg.upper().encode()) if __name__ == '__main__': # 这句话下面的所有代码都只在主进程中执行 sk = socket.socket() sk.bind(('127.0.0.1',9000)) sk.listen() while True: conn,addr = sk.accept() Process(target=talk,args=(sk,)).start() # 卡 大量的while True 并且代码中并没有太多的其他操作 # 如果我们使用socketserver,不会这么卡 # 多进程确实可以帮助我们实现并发效果,但是还不够完美 # 操作系统每开启一个进程要消耗大量的资源 # 操作系统要负责调度进程 进程越多 调度起来就越吃力
client端
import socket sk = socket.socket() sk.connect(('127.0.0.1',9000)) while True: sk.send(b'hello') print(sk.recv(1024))