2016-12-22 5 views
3

Мне просто интересно, есть ли какой-нибудь код python или магии, которые я могу выполнить, который перезапустит кластер ipython. Кажется, каждый раз, когда я меняю свой код, его нужно перезапустить.Можно ли перезапустить кластер iPython из ноутбука?

+0

Мне интересно, есть ли расширение для ноутбука, которое могло бы это сделать, но у меня возникли сомнения в том, что код, запущенный внутри ноутбука, который перезагружает его, может привести к бесконечному циклу запуска-перезапуска. –

ответ

0

Простая идея, кажется, слишком «Hacky» для производства:

установки в Client и определить простую функцию для тестирования.

import ipyparallel as ipp 
c = ipp.Client() 
dv = c[:] 

# simple function 
@dv.remote(block=True) 
def getpid(): 
    import os 
    return os.getpid() 

getpid() 
[1994, 1995, 1998, 2001] 

Определите функцию перезапуска кластера. shutdown с targets='all' и hub=True должен убить весь кластер. Затем запустите новый кластер с помощью команды ! или %sx.

import time 
def restart_ipcluster(client): 
    client.shutdown(targets='all', hub=True) 
    time.sleep(5) # give the cluster a few seconds to shutdown 

    # include other args as necessary 
    !ipcluster start -n4 --daemonize 
    time.sleep(60) # give cluster ~min to start 

    return ipp.Client() # with keyword args as necessary 

Одним из недостатков такого подхода заключается в том, что DirectView должен быть повторно назначено и любая функция украшены dv.remote или dv.parallel потребности быть повторно выполнена.

c = restart_ipcluster(c)  
dv = c[:] 

@dv.remote(block=True) 
def getpid(): 
    import os 
    return os.getpid() 

getpid() 
[3620, 3621, 3624, 3627] 

Чтение источник для ipyparallel Client, то shutdown метод упоминалось выше, имеет ключевое слово аргумент, restart=False, но в настоящее время не осуществляется. Возможно, разработчики работают над надежным методом.

+0

Спасибо за предложение; Я отдам его. Есть ли причина, почему по дизайну основной ноутбук не имеет контроля за процессом? – cjm2671