python epoll簡單模型 協程的實現方式

2021-08-11 08:22:28 字數 2199 閱讀 7692

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 管理頂點緩衝物件,...