在對伺服器實現web服務的時候,面對多個使用者的請求時,我們可以採取多程序或者多執行緒。
下面是他們的實現**:
import urllib.request
import multiprocessing
import re
import socket
def service_client(new_socket):
"""為客戶端服務"""
# 接受瀏覽器發過來的請求
request = new_socket.recv(1024).decode("utf-8")
# 返回http格式的資料,給瀏覽器
# 建立socket
tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
# 繫結
tcp_socket.bind(("",7788))
# 監聽套接字
tcp_socket.listen(128)
# 等待客戶端的連線
while true:
new_socket,client_addr = tcp_socket.accept()
# 為這個客戶端服務
p = multiprocessing.process(target=service_client,args=(new_socket,))
p.start()
new_socket.close()
tcp_socket.close()
if __name__=="__main__":
http_serve()
多執行緒和多程序**差不多就不一一貼出了,但是今天主要是想談一下另一種實現的方式就是協程gevent。協程相比程序和執行緒而言,用的資源更少,效率更高。
**如下:
import urllib.request
import multiprocessing
import re
import socket
import gevent
from gevent import monkey
monkey.path_all()
def service_client(new_socket):
"""為客戶端服務"""
# 接受瀏覽器發過來的請求
request = new_socket.recv(1024).decode("utf-8")
# 返回http格式的資料,給瀏覽器
# 建立socket
tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
# 繫結
tcp_socket.bind(("",7788))
# 監聽套接字
tcp_socket.listen(128)
# 等待客戶端的連線
while true:
new_socket,client_addr = tcp_socket.accept()
# 為這個客戶端服務
strlen函式的多種實現方式
strlen函式檢測字串實際長度,不包含 0 如 char s 1234567 int a strlen s a 7 可認為strlen char 檢測的是 0 strlen char 碰到 0 就返回 0 以前的字元數。include include include includeint my s...
web動畫實現的多種方式
html5 css3時代,我們要在web裡做動畫選擇其實已經很多了 你可以用css3的animattion keyframes 你也可以用css3的transition 你還可以用通過在canvas上作圖來實現動畫,也可以借助jquery動畫相關的api方便地實現 當然最原始的你還可以使用windo...
多種方式實現兩列布局
兩列布局使我們再做頁面的時候用的最多的布局方式,也是設計稿種最常見的一種布局型別,一般分為 一列固定寬度另一列自適應寬度,兩列自適應寬度,兩列相同高度等形式 這篇文章將詳細介紹各種兩列布局的實現方式 說起 布局是在css3之前相容性最好的一種布局方式,使用 做兩列自適應寬度或者高度布局能夠在ie6瀏...