欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 簡單搭建阻塞式單進程,多進程,多線程服務的實例

 更新時間:2017年11月01日 14:12:46   作者:hongxinerke  
下面小編就為大家?guī)硪黄猵ython 簡單搭建阻塞式單進程,多進程,多線程服務的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

我們可以通過這樣子的方式去理解apache的工作原理

1 單進程TCP服務(堵塞式)

這是最原始的服務,也就是說只能處理個客戶端的連接,等當前客戶端關(guān)閉后,才能處理下個客戶端,是屬于阻塞式等待

from socket import *
serSocket = socket(AF_INET, SOCK_STREAM)
#重復使用綁定的信息
serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)

localAddr = ('', 7788)
serSocket.bind(localAddr)

serSocket.listen(5)

while True:
 print('-----主進程,等待客戶端連接------')
 newSocket,destAddr = serSocket.accept()
 print('-----.主進程,接下來負責數(shù)據(jù)處理[%s]-----'%str(destAddr))
 try:
  while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]客戶端已經(jīng)關(guān)閉...'%str(destAddr))
  break
 finally:
  newSocket.close()

這種阻塞型自然不適合處理多客戶端的請求,于是有了改版

2 多進程服務

采取多進程處理多客戶端連接請求,對單進程進行了優(yōu)化。

from socket import *
from multiprocessing import *
from time import sleep
# 處理客戶端的請求并為其服務
def dealWithClient(newSocket,destAddr):
 while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]客戶端已經(jīng)關(guān)閉'%str(destAddr))
   break
 newSocket.close()
def main():
 serSocket = socket(AF_INET, SOCK_STREAM)
 serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
 localAddr = ('', 7788)
 serSocket.bind(localAddr)
 serSocket.listen(5)
 try:
  while True:
  print('-----主進程,,等待新客戶端的到來------')
  newSocket,destAddr = serSocket.accept()
  print('-----主進程,,接下來創(chuàng)建.個新的進程負責數(shù)據(jù)處理[%s]-----'
  client = Process(target=dealWithClient, args=(newSocket,destAddr))
  client.start()
  #因為已經(jīng)向.進程中copy了.份(引.),并且.進程中這個套接字也沒有用處了
  #所以關(guān)閉
  newSocket.close()
 finally:
  #當為所有的客戶端服務完之后再進.關(guān)閉,表示不再接收新的客戶端的鏈接
  serSocket.close()
 if __name__ == '__main__':
  main()

通過為每個客戶端創(chuàng)建一個進程的方式,能夠同時為多個客戶端進行服務;當客戶端不是特別多的時候,這種方式還行,如果有成百上千個,就不可取了,因為每次創(chuàng)建進程都消耗較多的資源,于是有了改進版

3 多線程服務

采用多線程處理多客戶端連接請求,由于線程共享資源,不用像進程那樣復制出多個資源,因此處理更快。

#coding=utf-8
from socket import *
from threading import Thread
from time import sleep

# 處理客戶端的請求并執(zhí)行
def dealWithClient(newSocket,destAddr):
 while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]客戶端已經(jīng)關(guān)閉'%str(destAddr))
   break
 newSocket.close()

def main():
 serSocket = socket(AF_INET, SOCK_STREAM)
 serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
 localAddr = ('', 7788)
 serSocket.bind(localAddr)
 serSocket.listen(5)
 try:
  while True:
   print('-----主進程,,等待新客戶端的到來------')
   newSocket,destAddr = serSocket.accept()
   print('-----主進程,,接下來創(chuàng)建.個新的進程負責數(shù)據(jù)處理[%s]-----'
   client = Thread(target=dealWithClient, args=(newSocket,destAddr))
   client.start()

   #這里不要關(guān)閉,線程共享資源,關(guān)閉了會導致全部線程均關(guān)閉
   #newSocket.close()
 finally:
  serSocket.close()
if __name__ == '__main__':
main()

以上這篇python 簡單搭建阻塞式單進程,多進程,多線程服務的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python自動發(fā)送測試報告郵件功能的實現(xiàn)

    python自動發(fā)送測試報告郵件功能的實現(xiàn)

    這篇文章主要介紹了python自動發(fā)測試報告郵件功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Python QQBot庫的QQ聊天機器人

    Python QQBot庫的QQ聊天機器人

    這篇文章主要為大家詳細介紹了基于Python QQBot庫的QQ聊天機器人,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python人工智能語音合成實現(xiàn)案例詳解

    Python人工智能語音合成實現(xiàn)案例詳解

    這篇文章主要為大家介紹了Python人工智能語音合成實現(xiàn)案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • python基礎之入門必看操作

    python基礎之入門必看操作

    下面小編就為大家?guī)硪黄猵ython基礎之入門必看操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 詳解Python之數(shù)據(jù)序列化(json、pickle、shelve)

    詳解Python之數(shù)據(jù)序列化(json、pickle、shelve)

    本篇文章主要介紹了Python之數(shù)據(jù)序列化,本節(jié)要介紹的就是Python內(nèi)置的幾個用于進行數(shù)據(jù)序列化的模塊,有興趣的可以了解一下。
    2017-03-03
  • 關(guān)于pymysql模塊的使用以及代碼詳解

    關(guān)于pymysql模塊的使用以及代碼詳解

    在本篇文章里小編給大家整理的是關(guān)于關(guān)于pymysql模塊的使用以及代碼詳解,有興趣的朋友們學習下。
    2019-09-09
  • Python文件操作基本流程代碼實例

    Python文件操作基本流程代碼實例

    這篇文章主要介紹了Python文件操作基本流程代碼實例,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • python中進程間通信及設置狀態(tài)量控制另一個進程

    python中進程間通信及設置狀態(tài)量控制另一個進程

    這篇文章主要介紹了python中進程間通信及設置狀態(tài)量控制另一個進程,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python編寫淘寶秒殺腳本

    Python編寫淘寶秒殺腳本

    最近想搶冰墩墩的手辦和鑰匙圈,但是同志們搶的速度太快了,只能利用Python編寫一個淘寶秒殺腳本了,文中示例代碼講解詳細,需要的可以參考一下
    2022-02-02
  • 用Python進行基礎的函數(shù)式編程的教程

    用Python進行基礎的函數(shù)式編程的教程

    這篇文章主要介紹了用Python進行基礎的函數(shù)式編程的教程,除了面向?qū)ο缶幊桃馔?、Python還可以進行簡單的不依賴外部變量的函數(shù)式編程,本文介紹了其中的一些基礎,需要的朋友可以參考下
    2015-03-03

最新評論