日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python实现HTTP服务器(三)线程、进程、协程实现多任务

發布時間:2025/3/15 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实现HTTP服务器(三)线程、进程、协程实现多任务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.線程、進程實現多任務HTTP服務器

import re import socket import multiprocessing import threadingdef service_client(new_socket):"""為這個客戶端返回數據"""# 接收瀏覽器發送過來的請求,即HTTP請求request=new_socket.recv(1024)request=request.decode("utf-8") # 解碼request_lines=request.splitlines() # 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表print(request_lines)# GET /index.html HTTP/1.1# [^/]表示除了/都可以file_name=""ret=re.match(r"[^/]+(/[^ ]*)",request_lines[0])if ret:file_name=ret.group(1)if file_name=="/":file_name="/index.html"# 2.返回HTTP格式的數據,給瀏覽器try:# 準備發送的body,打開HTML文件f=open("html"+file_name,'rb')except:response="HTTP/1.1 404 NOT FOUND\r\n"response+='\r\n'response+="----file not found----"new_socket.send(response.encode("utf-8"))else:html_content=f.read()f.close()# 準備發送的headerresponse="HTTP/1.1 200 OK\r\n"response+="\r\n" # header與body之間必須隔一行# 發送headernew_socket.send(response.encode("utf-8"))# 發送HTMLnew_socket.send(html_content)new_socket.close()def main():tcp_sever_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 服務器先關閉,保證重新開啟不占用端口tcp_sever_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)tcp_sever_socket.bind(("",7890))tcp_sever_socket.listen(128)while True:# 等待新客戶端的鏈接new_socket,client_addr=tcp_sever_socket.accept()#p=multiprocessing.Process(target=service_client,args=(new_socket,))p=threading.Thread(target=service_client,args=(new_socket,))p.start()# 子進程關閉一次主進程還需關閉一次,Linux下文件硬鏈接的原因,兩個名字指向同一個文件,因此要關閉兩次#new_socket.close()# 關閉監聽套接字tcp_sever_socket.close() if __name__ == '__main__':main()

2.gevent協程實現多任務HTTP服務器

import re import socket import gevent from gevent import monkeymonkey.patch_all() def service_client(new_socket):"""為這個客戶端返回數據"""# 接收瀏覽器發送過來的請求,即HTTP請求request=new_socket.recv(1024)request=request.decode("utf-8") # 解碼request_lines=request.splitlines() # 按照行('\r', '\r\n', \n')分隔,返回一個包含各行作為元素的列表print(request_lines)# GET /index.html HTTP/1.1# [^/]表示除了/都可以file_name=""ret=re.match(r"[^/]+(/[^ ]*)",request_lines[0])if ret:file_name=ret.group(1)if file_name=="/":file_name="/index.html"# 2.返回HTTP格式的數據,給瀏覽器try:# 準備發送的body,打開HTML文件f=open("html"+file_name,'rb')except:response="HTTP/1.1 404 NOT FOUND\r\n"response+='\r\n'response+="----file not found----"new_socket.send(response.encode("utf-8"))else:html_content=f.read()f.close()# 準備發送的headerresponse="HTTP/1.1 200 OK\r\n"response+="\r\n" # header與body之間必須隔一行# 發送headernew_socket.send(response.encode("utf-8"))# 發送HTMLnew_socket.send(html_content)new_socket.close()def main():tcp_sever_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 服務器先關閉,保證重新開啟不占用端口tcp_sever_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)tcp_sever_socket.bind(("",7890))tcp_sever_socket.listen(128)while True:# 等待新客戶端的鏈接new_socket,client_addr=tcp_sever_socket.accept()gevent.spawn(service_client,new_socket)# 關閉監聽套接字tcp_sever_socket.close() if __name__ == '__main__':main()

總結

以上是生活随笔為你收集整理的Python实现HTTP服务器(三)线程、进程、协程实现多任务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。