最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用epoll實現服務端的方法

 更新時間:2018年10月16日 10:45:40   作者:linux_c_coding_man  
今天小編就為大家分享一篇python使用epoll實現服務端的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

如下所示:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import socket
import select

send_data = "hello world!"
send_len = len(send_data)
recv_len = 1024
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ("0.0.0.0", 8765)
tcp_socket.bind(addr)
tcp_socket.listen(5)
tcp_socket.setblocking(False)
epoll = select.epoll()
'''(邊緣觸發(fā))select.EPOLLIN | select.EPOLLET'''
epoll.register(tcp_socket.fileno(), select.EPOLLIN)
'''因為epoll返回的觸發(fā)事件對應的是套接字文件描述符,所以需要在字典中加入對應關系'''
fd_to_socket = {tcp_socket.fileno():tcp_socket}

while True :
 events = epoll.poll(-1)
 for fd, event in events:
  fd_socket = fd_to_socket[fd]
  if fd == tcp_socket.fileno():
   while True:
    try:
     new_socket, new_addr = fd_socket.accept()
    except socket.error as e:
     (errno, err_msg) = e
     print errno
     print err_msg
     if errno == 11:
      break
    print "new accpet:", new_addr
    new_socket.setblocking(False)
    new_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    epoll.register(new_socket.fileno(), select.EPOLLIN)
    fd_to_socket[new_socket.fileno()] = new_socket
  elif event&select.EPOLLIN:
   recv_datas = []
   recd = 0
   while (recd < recv_len):
    try:
     recv_data = fd_socket.recv(recv_len - recd)
     '''處理讀的正常關閉'''
     if recv_data == "":
      print "close socket"
      epoll.unregister(fd)
      fd_to_socket[fd].close()
      del fd_to_socket[fd]
      break
     else:
      recv_datas.append(recv_data)
      recd = recd + len(recv_data)
    '''處理異常關閉(EAGAIN,EINTR)'''
    except socket.error as e:
     (errno, err_msg) = e
     print errno
     print err_msg
     '''因為用的水平觸發(fā),EAGAIN我們跳出循環(huán),等待下次觸發(fā)再讀就好了'''
     if errno == 11:
      break
     '''軟中斷打斷了還要繼續(xù)讀'''
     elif errno == 4:
      continue
     '''其它錯誤我們直接關閉套接字'''
     else:
      print "close socket"
      epoll.unregister(fd)
      fd_to_socket[fd].close()
      del fd_to_socket[fd]
      break
    print repr(recv_datas)
    total_send = 0
    while total_send < send_len:
     sent = fd_socket.send(send_data[total_send:])
     if sent == 0:
      print "close socket"
      epoll.unregister(fd)
      fd_to_socket[fd].close()
      del fd_to_socket[fd]
      break
     else:
      print repr(send_data[total_send:])
      total_send = total_send + sent

其實這里的異常處理我們也可以用

except IOError as e:
  print e.errno
  print e.strerror

以上這篇python使用epoll實現服務端的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 20個Python?random模塊常用函數的應用與代碼示例

    20個Python?random模塊常用函數的應用與代碼示例

    隨機數在計算機科學和數據科學領域中扮演著重要角色,Python的標準庫中提供了random模塊,用于生成各種隨機數,本文將深入探討random模塊的各種函數,以及它們的應用場景和代碼示例,需要的可以參考下
    2024-03-03
  • python中計算一個列表中連續(xù)相同的元素個數方法

    python中計算一個列表中連續(xù)相同的元素個數方法

    今天小編就為大家分享一篇python中計算一個列表中連續(xù)相同的元素個數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python驗證用戶密碼是否規(guī)范腳本示例

    Python驗證用戶密碼是否規(guī)范腳本示例

    對用戶密碼的強度進行校驗,要求用戶密碼達到一定的強度,符合安全性要求,這篇文章主要給大家介紹了關于Python驗證用戶密碼是否規(guī)范的相關資料,需要的朋友可以參考下
    2024-05-05
  • python set集合使用方法解析

    python set集合使用方法解析

    這篇文章主要介紹了python set集合使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • python 實現字符串下標的輸出功能

    python 實現字符串下標的輸出功能

    這篇文章主要介紹了python 簡單的實現字符串下標的輸出,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 基于Python實現二維圖像雙線性插值

    基于Python實現二維圖像雙線性插值

    雙線性插值,又稱為雙線性內插。在數學上,雙線性插值是有兩個變量的插值函數的線性插值擴展,其核心思想是在兩個方向分別進行一次線性插值。本文將用Python實現二維圖像雙線性插值,感興趣的可以了解下
    2022-06-06
  • 基于Python實現自動用小寫字母替換文件后綴的大寫字母

    基于Python實現自動用小寫字母替換文件后綴的大寫字母

    本文介紹基于Python語言,基于一個大文件夾,遍歷其中的多個子文件夾,對于每一個子文件夾中的大量文件,批量將其文件的名稱或后綴名中的字母由大寫修改為小寫的方法,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-04-04
  • Python數據可視化之畫圖

    Python數據可視化之畫圖

    今天小編就為大家分享一篇關于Python數據可視化之畫圖,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python虛擬環(huán)境virtualenv的安裝與使用

    python虛擬環(huán)境virtualenv的安裝與使用

    virtualenv用于創(chuàng)建獨立的Python環(huán)境,多個Python相互獨立,互不影響,它能夠:1. 在沒有權限的情況下安裝新套件 2. 不同應用可以使用不同的套件版本 3. 套件升級不影響其他應用
    2017-09-09
  • scrapy爬蟲完整實例

    scrapy爬蟲完整實例

    這篇文章主要介紹了scrapy爬蟲完整實例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01

最新評論

海盐县| 阿瓦提县| 泰顺县| 乌恰县| 新乡市| 九龙城区| 鲁甸县| 霸州市| 衡山县| 贡觉县| 塔河县| 长岛县| 阳朔县| 错那县| 中宁县| 台北市| 上思县| 库车县| 红安县| 韶山市| 汨罗市| 蕉岭县| 南江县| 金堂县| 凤凰县| 东明县| 明溪县| 渑池县| 廉江市| 娄底市| 南投市| 望谟县| 确山县| 米林县| 井研县| 江永县| 达尔| 集贤县| 迁西县| 勐海县| 新泰市|