epollin (可讀)
epollout (可寫)
epollet (et模式)
epoll對檔案描述符的操作有兩種模式:lt(level trigger)和et(edge trigger)。lt模式是預設模式,
lt模式與et模式的區別如下:
lt模式:當epoll檢測到描述符事件發⽣並將此事件通知應⽤程式,應⽤程式可以不⽴即處理該事件。下次調⽤e
poll時,會再次響應應⽤程式並通知此事件。
et模式:當epoll檢測到描述符事件發⽣並將此事件通知應⽤程式,應⽤程式必須⽴即處理該事件。如果不處理
,下次調⽤epoll時,不會再次響應應⽤程式並通知此事件。
lt類似於故障不除,紅燈不滅,
et類似於只說⼀次,不再贅述。
檔案描述符
在unix/linux中,一切皆檔案
import socket
import select
# 建立套接字
s = socket.socket(socket.af_inet, socket.sock_stream)
# 設定可以重複使⽤繫結的資訊
s.setsockopt(socket.sol_socket, socket.so_reuseaddr,1)
# 繫結本機資訊
s.bind(("",7788))
# 變為被動
s.listen(10)
# 將套接字設定為⾮阻塞模式
s.setblocking(false)
# 建立⼀個epoll物件
epoll = select.epoll()
# 測試,⽤來列印套接字對應的⽂件描述符
# print(s.fileno())
# print(select.epollin|select.epollet)
# 註冊事件到epoll中
# epoll.register(fd[, eventmask])
# 注意,如果fd已經註冊過,則會發⽣異常
# 將建立的套接字新增到epoll的事件監聽中
epoll.register(s.fileno(), select.epollin|select.epollet)
connections = {}
addresses = {}
# 迴圈等待客⼾端的到來或者對⽅傳送資料
while true:
# epoll 進⾏ fd 掃瞄的地⽅ -- 未指定超時時間則為阻塞等待
epoll_list = epoll.poll()
# 對事件進⾏判斷
for fd, events in epoll_list:
# print fd
# print events
# 如果是socket建立的套接字被啟用
if fd == s.fileno():
new_socket, new_addr = s.accept()
print('有新的客⼾端到來%s' % str(new_addr))
# 將 conn 和 addr 資訊分別儲存起來
connections[new_socket.fileno()] = new_socket
addresses[new_socket.fileno()] = new_addr
# 向 epoll 中註冊 新socket 的 可讀 事件
epoll.register(new_socket.fileno(), select.epollin|select.epollet)
# 如果是客⼾端傳送資料
elif events == select.epollin:
# 從啟用 fd 上接收
recvdata = connections[fd].recv(1024).decode("utf-8")
if recvdata:
print('recv:%s' % recvdata)
else:
# 從 epoll 中移除該 連線 fd
epoll.unregister(fd)
# server 側主動關閉該 連線 fd
connections[fd].close()
print("%s---offline---" % str(addresses[fd]))
del connections[fd]
del addresses[fd]
Python 簡單模型建立思路
這裡的建模 引入包 設定字符集,防止中文亂碼 讀入資料,檢視資料 異常資料處理標準化 對資料進行訓練集 測試集劃分 再次檢視資料 模型物件建立 模型訓練,輸出相關引數 模型輸出儲存 載入模型 值與實際畫圖比較 這裡面的知識點比較細,可以搜到很多案例。第一次學的話,模型的儲存容易實際在操作的時候出錯。...
python 網路程式設計,簡單模型
這個是客戶端 1import socket23 拿 4 client socket.socket 56 撥號,寫伺服器的ip和埠 7 client.connect 127.0.0.1 8080 89 10 client.send b i am client 對別人說話 1112 data clien...
OpenGL繪製簡單模型(回顧)
前言要想繪製乙個物件,需要將該物件的頂點資料傳送給頂點著色器。通常要把頂點資料在c 端放入乙個緩衝區 所謂的vbo 並將該緩衝區和著色器中宣告的頂點屬性相關聯。例如 以繪製乙個三維空間立方體傳遞資料為例。gluint vao,vbo glgenvertexarrays 1 vao 管理頂點緩衝物件,...