在 jupyter notebook 中停止 SimpleHttpSever

Stop SimpleHttpSever in jupyter notebook

我在 jupyter notebook 中使用 SimpleHTTPServer 是这样的:

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

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

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

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

服务器 运行 在后台,您需要搜索 PID 并杀死它,例如:

netstat -tulpn

Netstat 输出:

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

用 pkill 或 kill 杀死 PID:

kill 12332

答案是你不能。

您无法在 Jupyter Notebook 中引用以前的单元格(或结果)- see this open issue 以获取有关讨论的更多详细信息。

这意味着一旦您使用了 serve_forever() 函数,您就无法再操纵 object。

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