私は自分のウェブサイトをホストするための小さな 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 サイトにアクセスできなくなりました。