threading、multiprocessing、gevent的简单使用

1、threading

import re
import socket
import threading


# 定义服务函数为客户端服务
def server(new_socket):
    # 接收请求并解码
    request = new_socket.recv(1024).decode("utf-8")
    # 将请求分割成行
    request_lines = request.splitlines()
    # 使用正则匹配请求的第一行,内容大概为:GET / HTTP/1.1
    result = re.match(r'[^/]+(/[^ ]*)', request_lines[0])
    # 如果有匹配到内容,查找并读取对应文件内容
    if result:
        file_name = result.group(1)
        if file_name == "/":
            file_name = "/login.html"
    try:
        f = open(r'D:\testFile\web' + file_name, 'rb')
    # 否则发送404页面
    except:
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += '\r\n'
        response += "--------404-----------"
        new_socket.send(response.encode("utf-8"))
    # 发送header和body
    else:
        response_body = f.read()
        f.close()
        response_header = "HTTP/1.1 200 OK\r\n"
        response_header += '\r\n'
        # 发送header
        new_socket.send(response_header.encode("utf-8"))
        # 发送body
        new_socket.send(response_body)
    # 关闭服务套接字
    new_socket.close()


def main():
    # 创建套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定ip和port,双引号内空格为空表示绑定本地ip
    tcp_server.bind(("", 58080))
    # 监听
    tcp_server.listen(128)
    # 等待客户端请求
    while True:
        # 创建服务套接字,为请求客户端服务
        new_socket, client_addr = tcp_server.accept()
        # 调用服务函数
        t = threading.Thread(target=server, args=(new_socket, ))
        t.start()
    # 关闭套接字
    tcp_server.close()


if __name__ == '__main__':
    main()

2、multiprocessing

import re
import socket
import multiprocessing


def server(new_socket):

    request = new_socket.recv(1024).decode("utf-8")
    request_lines = request.splitlines()
    result = re.match(r'[^/]+(/[^ ]*)', request_lines[0])
    # 为客户端服务
    if result:
        file_name = result.group(1)
        if file_name == "/":
            file_name = "/login.html"
    try:
        f = open(r'D:\testFile\web' + file_name, 'rb')
    except:
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += '\r\n'
        response += "--------404-----------"
        new_socket.send(response.encode("utf-8"))

    else:
        response_body = f.read()
        f.close()
        response_header = "HTTP/1.1 200 OK\r\n"
        response_header += '\r\n'
        # 发送header
        new_socket.send(response_header.encode("utf-8"))
        # 发送body
        new_socket.send(response_body)

    new_socket.close()


def main():

    # 创建套接字
    tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定
    tcp_server.bind(("", 58080))
    # 监听
    tcp_server.listen(128)
    # 等待客户端请求
    while True:
        new_socket, client_addr = tcp_server.accept()
        p = multiprocessing.Process(target=server, args=(new_socket,))
        p.start()
        # 创建子进程时,会复制父进程全局变量和局部变量:new_socket,子进程和父进程都需要关闭服务套接字,才最终停止发送数据
        new_socket.close()

    tcp_server.close()


if __name__ == '__main__':
    main()

3、gevent

import re
import socket
import gevent
from gevent import monkey

monkey.patch_all()


def server(new_socket):

    request = new_socket.recv(1024).decode("utf-8")
    print(request)
    request_lines = request.splitlines()
    result = re.match(r'[^/]+(/[^ ]*)', request_lines[0])
    # 为客户端服务
    if result:
        file_name = result.group(1)
        if file_name == "/":
            file_name = "/login.html"
    try:
        f = open(r'D:\testFile\web' + file_name, 'rb')
    except:
        response = "HTTP/1.1 404 NOT FOUND\r\n"
        response += '\r\n'
        response += "--------404-----------"
        new_socket.send(response.encode("utf-8"))

    else:
        response_body = f.read()
        f.close()
        response_header = "HTTP/1.1 200 OK\r\n"
        response_header += '\r\n'
        # 发送header
        new_socket.send(response_header.encode("utf-8"))
        # 发送body
        new_socket.send(response_body)

    new_socket.close()


def main():

    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定
    tcp_socket.bind(("", 58080))
    # 监听
    tcp_socket.listen(128)
    # 等待客户端请求
    while True:

        new_socket, client_addr = tcp_socket.accept()
        gevent.spawn(server, new_socket)

    tcp_socket.close()


if __name__ == '__main__':
    main()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值