python3 进程池版的socket并发聊天
Posted lilyxiaoyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 进程池版的socket并发聊天相关的知识,希望对你有一定的参考价值。
Pool内的进程数默认是cpu核数,假设为4(查看方法os.cpu_count())
开启6个客户端,会发现2个客户端处于等待状态
在每个进程内查看pid,会发现pid使用为4个,即多个客户端公用4个进程
tcp_server.py
# coding:utf-8
import os
import socket
from multiprocessing import Pool
def tcpserver(conn):
while 1:
from_client_msg = conn.recv(1024)
if not from_client_msg: break
print("[%s]来自客户端的消息:" % os.getpid(), from_client_msg)
conn.send(from_client_msg.upper())
if __name__ == ‘__main__‘:
server = socket.socket()
ip_port = ("127.0.0.1", 8001)
server.bind(ip_port)
server.listen(5)
pool = Pool(os.cpu_count())
print("pool count:", os.cpu_count())
while 1:
conn, addr = server.accept()
res = pool.apply_async(tcpserver, args=(conn,))
pool.close()
pool.join()
tcp_client.py
# coding:utf-8
import socket
if __name__ == ‘__main__‘:
client = socket.socket()
ip_port = ("127.0.0.1", 8001)
client.connect(ip_port)
while 1:
inp = input(">>>>:").strip()
if not inp: continue
client.send(inp.encode("utf-8"))
from_server_msg = client.recv(1024)
print("来自服务端的消息:", from_server_msg)
发现:并发开启多个客户端,服务端同一时间只有4个不同的pid,只能结束一个客户端,另外一个客户端才会进来.
以上是关于python3 进程池版的socket并发聊天的主要内容,如果未能解决你的问题,请参考以下文章