我在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()
它工作得很好,但是我以后如何在下一个输入块中停止它?
答案是你不能。
您无法在 Jupyter Notebook 中引用以前的单元格(或其结果( - 有关讨论的更多详细信息,请参阅此未解决的问题。
这意味着一旦使用了 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()
服务器在后台运行,您需要搜索PID并杀死它,就像:
netstat -tulpn
Netstat out:
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 12332/python
用 pkill 杀死 PID 或杀死:
kill 12332