Python进程池的概念和实现

来源:互联网 发布:老板烟机淘宝和实体店 编辑:程序博客网 时间:2024/05/29 04:12


1 使用进程池实现socket 通信


ftp服务端

#!/usr/bin/python# -*- coding utf8 -*- from multiprocessing import Process,Poolfrom socket import *import osserver=socket(AF_INET,SOCK_STREAM)server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)server.bind(('127.0.0.1',8080))server.listen(5)def talk(conn,addr):    print(os.getpid())    while True:#通讯循环        try:            msg=conn.recv(1024)            if not msg:break            conn.send(msg.upper())        except Exception:            breakif __name__ == '__main__':    pool=Pool()    res_l=[]    while True:#链接循环        conn,addr=server.accept()        print(addr)        #pool.apply(talk,args=((conn,addr)))    #同步        res=pool.apply_async(talk, args=((conn, addr)))        res_l.append(res)        # p=Process(target=talk,args=((conn,addr)))        #p.start()

客户端信息

#!/usr/bin/python# -*- coding utf8 -*- from multiprocessing import Processfrom socket import *client=socket(AF_INET,SOCK_STREAM)client.connect(('127.0.0.1',8080))while True:    msg=input('msg: ').strip()    if not msg:continue    client.send(msg.encode('utf-8'))    msg2=client.recv(1024)    print(msg2.decode('utf-8'))


可以多开几个客户端 然后执行

此示例的cpu_count()为4

启动了5个客户端

执行之后呢  第五个客户端挂起 这时候呢 关闭任意一个客户端 挂起的客户端会执行 

服务端看到他的pid是关掉的那个 等同于复用了pid

这样就避免了进程过多

原创粉丝点击