2017-02-13 46 views
2

に停止SimpleHttpSever:私はこのようjupyterノートブックにSimpleHTTPServerを使用していますjupyterノート

import SimpleHTTPServer 
import SocketServer 

PORT = 8000 

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler 

httpd = SocketServer.TCPServer(("", PORT), Handler) 

print "serving at port", PORT 
httpd.serve_forever() 

それは良い動作しますが、どのように私はそれが次の入力ブロックの後半で停止することができますか?

+0

LinuxやOSX? – mtt2p

+0

'httpd.shutdown()'がうまく動作しませんか? – 9000

+0

@ 9000正確に!このコマンドは本当に私のために失敗します。コマンドはエラーなしで実行されますが、サーバーは起動して実行中です。 – matousc

答えて

1

答えはあなたができないということです。

議論の詳細については、Jupyter Notebook - see this open issueの中の以前のセル(またはその結果)を参照することができません。

これは、serve_forever()関数を使用した後はオブジェクトを操作できないことを意味します。

しかし、あなたのニーズに合わせてserve_foreverを書き換えることは可能かもしれません。現在のところ、文字通り、あなたが接続して 'シャットダウン'コマンドを発行できる条件を追加すると、後でオブジェクトを呼び出す必要がなくなります。あなたはソケットに接続し、TCPサーバが受け取って応答するカスタマイズされたヘッダを発行することができます。このパスであなたを開始するための簡単な例として、

class StoppableRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer): 

    def serve_forever(self): 
      while not self.stopped: 
       self.handle_request() 

    def not_forever(self): 
     # Called from another function when a custom header is detected 
     self.stopped = True 
     self.server_close() 
0

サーバーは、あなたが好きそれを殺すPIDを検索する必要がバックグラウンドで実行されています

netstat -tulpn 

Netstatのアウト:

tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN  12332/python 

pkillはキルPIDまたは殺す:

kill 12332 
+0

これらのコマンドは端末向けですが、そうではありませんか?これはジュピターのノートブックでどのように適用できますか? – matousc

+0

@matousc:Posixシステムで実行している場合は、 'Popen'や解析出力などを使ってこれらのコマンドを実行できます。問題はおそらく、 'kill'がHTTPサーバーだけでなく、Jupyterプロセス全体を終了させるということです。 – 9000

関連する問題