print("web伺服器---epoll")import socket
import re
import select
def service_client(new_socket,request):
request_lines = request.splitlines()
print("")
print(">"*20)
print(request_lines)
file_name = ""
ret= re.match(r"[^/]+(/[^ ]*)",request_lines[0])
if ret:
file_name = ret.group(1)
if file_name == "/":
file_name = "/index.html"
#返回http格式的資料,給瀏覽器
#關閉套接字
#new_socket.close()
def main():
"""用來建立套接字"""
# 1、建立套接字
tcp_server_socket = socket.socket(socket.af_inet,socket.sock_stream)
tcp_server_socket.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)
#2、繫結
tcp_server_socket.bind(("",7890))
#3、變為監聽套接字
tcp_server_socket.listen(128)
tcp_server_socket.setblocking(false) # 將套接子變為非堵塞
#建立epoll物件
epl = select.epoll()
#將監聽套接字對應的檔案描述符fd註冊到epoll中
epl.register(tcp_server_socket.fileno(),select.epollin)
fd_event_dict = dict()
while true:
fd_event_list = epl.poll() # 缺省會堵塞,直到os監測到資料到來,通過事件通知方式 告訴這個程式,此時才會
# (fd,event),(套接字對應的檔案描述符,這個檔案描述符到底是什麼事件,例如:可以呼叫revc接收等)
for fd,event in fd_event_list:
# 4、d等待新客戶端的鏈結
if fd == tcp_server_socket.fileno():
new_socket,client_addr = tcp_server_socket.accept()
epl.register(new_socket.fileno(),select.epollin)
fd_event_dict[new_socket.fileno()] = new_socket
elif event == select.epollin:
# 判斷已經鏈結的客戶端是否又資料傳送過來
recv_data = fd_event_dict[fd].recv(1024).decode("utf-8")
if recv_data:
service_client(fd_event_dict[fd],recv_data)
else:
fd_event_dict[fd].close()
epl.unregister(fd)
del fd_event_dict[fd]
#關閉監聽套接字
tcp_server_socket.close()
if __name__ == "__main__":
main()
python中用beautifulSoup 安裝
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!如果你用的是新版的debain或ubuntu,那麼可以通過系統的軟體包管理來安裝 apt get install python bs4 beautiful soup 4 通過pypi發布,所以如果你無法使用系統包管理安裝,那麼也可以通過 easy ...
python中用列表作為佇列
佇列有 先進先出 的,這樣沒刪除或者是鄭加乙個元素,這樣就需要對原列表進行移動,這樣效率會比較低,就引入 collections.deque這樣可以提高效率 from collections import deque queue deque eric john michael print queue...
python中用filter求素數
用filter求素數 生成器,生成乙個無限序列 def odd iter n 1while true n n 2 yieldn 篩選函式 def not divisible n return lambda x x n 0 生成器,不斷返回下乙個素數 defprimes yield 2it odd i...