1. 程式人生 > >python_day9 進程池

python_day9 進程池

試圖 核數 acc roc 處理 send __name__ pen sync

通過進程池 實現 socket

from multiprocessing import Process,Pool
import os,sys
from socket import *
import time
server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
server.bind((‘127.0.0.1‘,80))
server.listen(5)


def go(conn,addr):
while True:
try:
P=os.getpid()
data = conn.recv(1024)
print(P)
# conn.send(P)
except Exception as e:
print(e)
break


if __name__ == ‘__main__‘:
pool=Pool()
r_l=[]
while True:
conn,addr =server.accept()
res=pool.apply_async(go,args=(conn,addr))
r_l.append(res)

默認情況下 進程池中可以啟動的進程數 是 CPU 的核數,我這裏是4核
所以我用5個進程 測試, 當第5個客戶端 試圖 鏈接服務器的時候 現象是 等待服務器 返回;
實際上服務器是在處理前4個的請求, 當第一個的請求斷掉了, 第5個連上了;
當這個時候, 第一個客戶端 連上的 和 第5個客戶端連上的 在服務器端 是同一個進程 處理的,也就是 同一個PID



python_day9 進程池