2014-12-22 1 views
0

Я пытаюсь написать сценарий, который запустит новый движок.Создание IPython ipengineapp с аргументами ключевого слова

Используя код из источника IPython у меня есть: [engines.py]

def make_engine(): 
    from IPython.parallel.apps import ipengineapp as app 
    app.launch_new_instance() 

if __name__ == '__main__': 
    make_engine(file='./profiles/security/ipcontroller-engine.json', config='./profiles/e2.py') 

если я бегу это с python engines.py в командной строке я столкнулся с проблемой конфигурации и мой отслеживающий является:

Traceback (most recent call last): 
    File "engines.py", line 30, in <module> 
    make_engine(file='./profiles/security/ipcontroller-engine.json', config='./profiles/e2.py') 
    File "engines.py", line 20, in make_engine 
    app.launch_new_instance(**kwargs) 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 562, in launch_instance 
    app = cls.instance(**kwargs) 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/configurable.py", line 354, in instance 
    inst = cls(*args, **kwargs) 
    File "<string>", line 2, in __init__ 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 94, in catch_config_error 
    app.print_help() 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 346, in print_help 
    self.print_options() 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 317, in print_options 
    self.print_alias_help() 
    File "/Users/martin/anaconda/lib/python2.7/site-packages/IPython/config/application.py", line 281, in print_alias_help 
    cls = classdict[classname] 
KeyError: 'BaseIPythonApplication' 

если я супер уродливое рубить, как в следующем, он работает:

def make_engine(): 
    from IPython.parallel.apps import ipengineapp as app 
    app.launch_new_instance() 

if __name__ == '__main__': 
    from sys import argv 
    argv = ['--file=./profiles/security/ipcontroller-engine.json', '--config=./profiles/e2.py'] #OUCH this is ugly! 
    make_engine() 

Почему я не могу передать аргументы ключевого слова в методе launch_new_instance?

Каковы правильные аргументы ключевого слова?

Где я могу получить точку входа в параметры моей конфигурации?

Спасибо,

Martin

ответ

0

Способ создания экземпляра нового ipengine с помощью API IPEngineApp является:

def make_engine(): 
    from IPython.parallel.apps.ipengineapp import IPEngineApp 
    lines1 ="a_command()" 
    app1 = IPEngineApp() 
    app1.url_file = './profiles/security/ipcontroller-engine.json' 
    app1.cluster_id = 'e2' 
    app1.startup_command = lines1 
    app1.init_engine() 
    app1.start() 

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

Таким образом, я должен был Откат на модуле подпроцесса нереститься все новые дополнительные ipengines:

import subprocess 
import os 

pids = [] 
for num in range(1,3): 
    args = ["ipengine", "--config", os.path.abspath("./profiles/e%d.py" % num), "--file",os.path.abspath("./profiles/security/ipcontroller-engine.json") ] 
    pid = subprocess.Popen(args).pid 
    pids.append(pid)