2015-03-17 2 views
0

Я хотел бы поставить в очередь некоторый код для выполнения в основном потоке IPython из работающего ядра. Другими словами, я хочу сделать что-то вроде этого (это псевдокод - я не могу найти API для этого).Выполнение кода в основном потоке IPython из работающего ядра

IPython.current_kernel.queue_execution("print 'FOO'") 

Я знаю, что могу использовать IPython.kernel.connect.get_connection_file(), чтобы получить информацию о соединении текущего ядра. И тогда я могу построить клиент с этим файлом соединения. Но в идеале я бы хотел сделать это без связи. Есть ли способ сделать это?

Я использую IPython 2.4.

+0

Я не думаю, что IPython поддерживает собственную очередь запросов (ZMQ обрабатывает очередность уже). Почему вы хотите выполнить очередь в очереди, а не просто выполнять непосредственно? –

+0

Проблемы с присоединением к теме. Я нашел решение с помощью IOLoop от ZMQ. –

+0

Кроме того, почему downvote? –

ответ

0

Я нашел решение, которое работает для моего прецедента. В моем примере использования ядра создаются с использованием IPython.kernel.multikernelmanager.MultiKernelManager (который запускает ядра из-proc). Это отличается от ядра, выполняющегося в процессе (например, когда вы просто запускаете консоль IPython, запустив ipython.exe).

Так что для моей вне-прок ядра случае, следующие работы:

zmq.eventloop.ioloop.IOLoop.current().add_callback(my_callback) 

Я не знаю, почему именно он не работает в случае ядра в-Proc. Возможно, потому что, когда вы запускаете консоль IPython, основной поток выполняет консольное ввод/вывод все время (гипотеза).

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