0

私は自分のウェブサイトをホストするための小さな python ウェブサーバー スクリプトを持っており、リクエスト処理とエラーを返します。このスクリプトは私の PC では完全に機能しましたが、ラズベリー Pi で試してみたところ、3 分ごとに再起動しませんでした (サーバーは 15 秒後にクラッシュするため、3 分ごとに再起動するのが良いように思えました)。

そこで、サーバースクリプトを書き直して、初めて起動するか再起動するかなどをチェックします。コードだけお見せします。

#Handler class above here
...
...
class Server:

    global server_class, server_adress, httpd
    server_class = HTTPServer
    server_adress = ('localhost', 8080)
    httpd = server_class(server_adress, Handler)

    def __init__(self):

        self.status = False
        self.process()

    def process(self):

        print(self.status)

        process = threading.Timer(10, self.process)
        process.start()

        if self.status == True:

            httpd.socket.close()
            self.main()

        if self.status == False:

            self.main()

    def main(self):

        try:

            if self.status == False:

                print("Server online!")
                self.status = True
                httpd.serve_forever()

            if self.status == True:

                print("Server restarted!")
                httpd.serve_forever()

        except KeyboardInterrupt:

            print("Server shutting down...")
            httpd.socket.close()

    if __name__ == "__main__":
        instance = Server()

10 秒間実行した後 (動作し、Web サイトにアクセスできますhttp://localhost:8080/index.html)、10 秒ごとに次のエラーが表示され続けます。

File "C:\Users\myname\Dropbox\Python\Webserver\html\server.py", line 187, in main httpd.serve_forever()
File "C:\Python33\lib\socketserver.py", line 237, in serve_forever poll_interval)
File "C:\Python33\lib\socketserver.py", line 155, in _eintr_retry return func(*args)
ValueError: file descriptor cannot be a negative integer (-1)

基本的に、これを修正するにはどうすればよいですか?サーバーを実行している関数を再起動するために、スレッドタイマーを備えた単純な関数を使用することもできますが、どういうわけか私のRaspberry Piでは機能しませんが、Windowsでは機能します。

編集: また、スクリプトを初めて起動すると、Web サイトにアクセスでき、高速であることに注意してください。10 秒後 (サーバーの再起動後)、アクセスできますが、非常に低速です。さらに 10 秒後に、自分の Web サイトにアクセスできなくなりました。

4

1 に答える 1