【问题标题】:Stop SimpleHttpSever in jupyter notebook在 jupyter notebook 中停止 Simple Http Server
【发布时间】:2017-07-01 18:20:10
【问题描述】:

我在 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()

效果很好,但我如何在下一个输入块稍后停止它?

【问题讨论】:

  • linux 还是 osx ??
  • httpd.shutdown() 对你不起作用吗?
  • @9000 没错!这个命令对我来说确实失败了。该命令执行没有错误,但服务器仍在运行。

标签: python jupyter-notebook simplehttpserver


【解决方案1】:

服务器在后台运行,您需要搜索 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?
  • @matousc:您可以使用Popen 运行这些命令、解析输出等,前提是您在 Posix 系统上运行。问题是kill 可能会杀死整个 Jupyter 进程,而不仅仅是 HTTP 服务器。
【解决方案2】:

答案是你不能。

您无法在 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()

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多