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就是父进程
View Code
二: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()
View Code
三:开启子进程。实现一个并发的 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,不会这么卡
# 多进程确实可以帮助我们实现并发效果,但是还不够完美
# 操作系统每开启一个进程要消耗大量的资源
# 操作系统要负责调度进程 进程越多 调度起来就越吃力  
View Code
        client端
import socket
​
sk = socket.socket()
​
sk.connect(('127.0.0.1',9000))
while True:
    sk.send(b'hello')
    print(sk.recv(1024))
View Code

 

posted @ 2019-04-08 22:04  __Invoker  阅读(69)  评论(0编辑  收藏  举报