2017-02-13 2 views
2

Я использую SimpleHTTPServer в jupyter ноутбука, как это:Stop SimpleHttpSever в 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 в соответствии с вашими потребностями. В настоящее время он будет в буквальном смысле служить независимо от того, что, но добавив условие, которое позволяет вам подключиться и выпустить команду «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() 
0

сервер работают в фоновом режиме, вы должны искать PID убить нравится:

netstat -tulpn 

Netstat из:

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

убить PID с pkill или убить:

kill 12332 
+0

Эти команды для терминала, не так ли? Как это применимо в ноутбуке jupyter? – matousc

+0

@matousc: вы можете запускать эти команды с помощью 'Popen', вывода синтаксического анализа и т. Д. При условии, что вы работаете в системе Posix. Проблема в том, что, вероятно, 'kill' убьет весь процесс Jupyter, а не только HTTP-сервер. – 9000

Смежные вопросы