在jupyter笔记本中停止SimpleHttpSever

时间:2017-02-13 17:05:23

标签: python jupyter-notebook simplehttpserver

我在jupyter笔记本中使用SimpleHTTPServer,如下所示:

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

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

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

效果很好,但是我怎样才能在下一个输入块中停止它?

2 个答案:

答案 0 :(得分:2)

答案是你做不到。

您无法引用Jupyter Notebook内部的前一个单元格(或结果) - see this open issue了解有关讨论的详细信息。

这意味着一旦使用了serve_forever()函数,就无法操作对象。

但是,可以重写serve_forever以满足您的需求。目前它无论如何都会提供服务,但是添加一个允许你连接并发出'shutdown'命令的条件将避免以后调用该对象的需要。您可以只连接到套接字并发出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()

答案 1 :(得分:0)

服务器在后台运行,你需要搜索PID,就像它一样:

netstat -tulpn

Netstat out:

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

使用pkill或kill杀死PID:

kill 12332