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并发聊天的主要内容,如果未能解决你的问题,请参考以下文章

python socket怎么调用不了

网络编程套接字

Socket--模拟聊天

多进程并发简单socket

python3 多进程实现socket通讯

使用多进程 实现socket tcp协议 server端的并发