Python进程池的概念和实现
1 使用进程池实现socket 通信ftp服务端#!/usr/bin/python# -*- coding utf8 -*-from multiprocessing import Process,Poolfrom socket import *import osserver=socket(AF_INET,SOCK_STREAM)server.setsockopt(
·
1 使用进程池实现socket 通信
ftp服务端
#!/usr/bin/python
# -*- coding utf8 -*-
from multiprocessing import Process,Pool
from socket import *
import os
server=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:
break
if __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 Process
from 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
这样就避免了进程过多
更多推荐
已为社区贡献39条内容
所有评论(0)