Python下的select模組及方法解釋

2021-09-20 16:11:39 字數 2596 閱讀 3428

python中有乙個select模組,其中提供了:select、poll、epoll三個方法,分別呼叫系統的 select,poll,epoll 從而實現io多路復用。

windows python:

提供: select

mac python:

提供: select

linux python:

提供: select、poll、epoll

注意:網路操作、檔案操作、終端操作等均屬於io操作,對於windows只支援socket操作,其他系統支援其他io操作,但是無法檢測 普通檔案操作 自動上次讀取是否已經變化。

對於select方法:

控制代碼列表11, 控制代碼列表22, 控制代碼列表33 = select.select(控制代碼序列1, 控制代碼序列2, 控制代碼序列3, 超時時間)

引數: 可接受四個引數(前三個必須)

返回值:三個列表

select方法用來監視檔案控制代碼,如果控制代碼發生變化,則獲取該控制代碼。

1、當 引數1 序列中的控制代碼發生可讀時(accetp和read),則獲取發生變化的控制代碼並新增到 返回值1 序列中

2、當 引數2 序列中含有控制代碼時,則將該序列中所有的控制代碼新增到 返回值2 序列中

3、當 引數3 序列中的控制代碼發生錯誤時,則將該發生錯誤的控制代碼新增到 返回值3 序列中

4、當 超時時間 未設定,則select會一直阻塞,直到監聽的控制代碼發生變化

當 超時時間 = 1時,那麼如果監聽的控制代碼均無任何變化,則select會阻塞 1 秒,之後返回三個空列表,如果監聽的控制代碼有變化,則直接執行。

利用select監聽終端操作例項

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import select

import threading

import sys

while true:

readable, writeable, error = select.select([sys.stdin,],,,1)

if sys.stdin in readable:

print 'select get stdin',sys.stdin.readline()

利用select實現偽同時處理多個socket客戶端請求:服務端

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import socket

import select

sk1 = socket.socket(socket.af_inet, socket.sock_stream)

sk1.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)

sk1.bind(('127.0.0.1',8002))

sk1.listen(5)

sk1.setblocking(0)

inputs = [sk1,]

while true:

readable_list, writeable_list, error_list = select.select(inputs, , inputs, 1)

for r in readable_list:

# 當客戶端第一次連線服務端時

if sk1 == r:

print 'accept'

request, address = r.accept()

request.setblocking(0)

# 當客戶端連線上服務端之後,再次傳送資料時

else:

received = r.recv(1024)

# 當正常接收客戶端傳送的資料時

if received:

print 'received data:', received

# 當客戶端關閉程式時

else:

inputs.remove(r)

sk1.close()

利用select實現偽同時處理多個socket客戶端請求:客戶端

#!/usr/bin/env python

# -*- coding:utf-8 -*-

import socket

ip_port = ('127.0.0.1',8002)

sk = socket.socket()

sk.connect(ip_port)

while true:

inp = raw_input('please input:')

sk.sendall(inp)

sk.close()

執行結果:

客戶端輸入

服務端接收

說明:此處的socket服務端相比與原生的socket,他支援當某乙個請求不再傳送資料時,伺服器端不會等待而是可以去處理其他請求的資料。但是,如果每個請求的耗時比較長時,select版本的伺服器端也無法完成同時操作。

python怎麼取模 Python中的取模運算方法

所謂取模運算,就是計算兩個數相除之後的餘數,符號是 如a b就是計算a除以b的餘數。用數學語言來描述,就是如果存在整數n和m,其中0 m b,使得a n b m,那麼a b a n b m.取模運算的兩個運算元都必須是整數,可以是負整數,但是b不可以是0,因為被除數不能為0嘛。當a和b中存在負整數時...

vxworks下select 的使用

select 作用是掛起一系列的檔案描述符,其api為 int select int width,number of bits to examine from 0 fd set preadfds,read fds fd set pwritefds,write fds fd set pexceptfd...

linux下的Select函式

part1 fd set errorfds同上面兩個引數的意圖,用來監視檔案錯誤異常。struct timeval timeout是select的超時時間,這個引數至關重要,它可以使select處於三種狀態,第一,若將null以形參傳入,即不傳入時間結構,就是將select置於阻塞狀態,一定等到監視...