在定义的访问/下载次数后关闭Python Web服务器

在定义的访问/下载次数后关闭Python Web服务器,python,python-3.x,web-services,webserver,limit,Python,Python 3.x,Web Services,Webserver,Limit,我试图找到一种方法,在一定数量的访问/下载之后关闭Python Web服务器。我只需使用以下代码运行Python Web服务器: import http.server, socketserver port = 8800 handler = http.server.SimpleHTTPRequestHandler httpd = socketserver.TCPServer(("", port), handler) httpd.serve_forever() 在达到一定数量的下载/文件访问之后

我试图找到一种方法,在一定数量的访问/下载之后关闭Python Web服务器。我只需使用以下代码运行Python Web服务器:

import http.server, socketserver

port = 8800
handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", port), handler)
httpd.serve_forever()
在达到一定数量的下载/文件访问之后,我想停止服务

单个文件访问通常记录为:

192.168.0.1- - [01/Jan/1970 00:00:00] "GET /file.txt HTTP/1.1" 200 -
有没有办法直接解析Web服务器的日志并做出相应的反应


例如,如果达到了GET.*200-的特定次数,请停止服务。

您可以计算请求的数量,并在达到特定数量后退出http服务器。这是一个非常基本的示例,它可以如何工作:

import http.server, socketserver
import sys

def shutdown(fn):
    def wrapper(*args, **kw):
        cls = args[0]

        if cls.count > 5:
            print ("shutting down server")
            sys.exit(0) 
        else:
            return fn(*args,**kw)
    return wrapper


class myHandler(http.server.SimpleHTTPRequestHandler):
    count = 0

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    @shutdown
    def do_GET(self, *args, **kwargs):
        myHandler.count += 1
        super().do_GET(*args, **kwargs)

    @shutdown
    def do_POST(self, *args, **kwargs):
        self.count += 1
        super().do_POST(*args, **kwargs)


port = 8800
handler = myHandler
httpd = socketserver.TCPServer(("", port), handler)
httpd.serve_forever()

那么,您可以将http.server.SimpleHTTPRequestHandler子类化,并使派生类对请求执行任何您想要的操作?或者可以是外部的,比如说,在unix中,比如bash脚本?您可以扩展服务器来做您想做的事情。@RafaelAguilar我更喜欢Python,但我愿意听取建议。您将如何在bash中实现这一点?需要一些微调,因为关闭现在不起作用-但我肯定可以将其用于我的项目!非常感谢你!退出函数不起作用,因为它只会引发SystemExit异常,不知道如何处理它