2013-12-20 10 views
5

どのように動作しますか?私はIPython Notebookでいくつかのコードを実行しています。反復的な作業コードが実行されていた閉じたIPythonノートブック

私は実行中のノートブックでブラウザを閉じましたが、IPythonダッシュボードに戻ると、このノートブックはシャットダウンしていないことがわかります。ノートブックをもう一度開くと、自分のコードの前に[*]それは実行していた。

私のPCにはまだコードが実行されていると聞こえますが、printステートメントの新しい出力は表示されません。

私は出力を待って、やがて出力を続けることができますか、または私のPCは私のコードを実行しますが、もはやアクセスできなくなりますか?

+0

はい、ブラウザを閉じると出力が表示されなくなります。 1つの解決策は、後でアクセスできるようにSTDoutをファイルに再ルーティングすることです。関連記事を参照してください:http://stackoverflow.com/questions/29119657/ipython-notebook-keep-printing-to-notebook-output-after-closing-browser/29170902#29170902 – Peter

答えて

4

ipythonを起動すると、基本的に別のプロセスで実行されているWebサーバーが作成されています。コード自体はWebサーバーまたはカーネル上で実行されています。 Webブラウザは、カーネル上のコードを表示および編集できるいくつかのフロントエンドの1つです。

このデザインでは、ipythonはコードの表示と編集を区別することができます。たとえば、Webインターフェイス(ipython notebook)、コンソール(ipython console)、qtコンソールインタフェース(ipython qtconsole)。

1つのフロントエンドで要求された出力は、同じカーネルを使用している他のフロントエンドには表示されませんが(私はこれについて100%確信していません)、あなたのPCはコードを実行し続けます。

詳細はhereです。

+0

これは役に立つ情報です。正しく理解していただきありがとうございますカーネルはアクティブのままであり、フロントエンドは柔軟性があります。しかし、それは私が別のフロントエンドでカーネルに再びアクセスできることを示唆しています。しかし、ノートブックが[*]の段階にとどまっている場合、%connect_infoを得る方法。 – Mattijn

+3

これは私たちが今のところ持っている制限です.HTMLページを閉じると、javascriptは将来、どの出力を受け取るかについての情報を失います(コールバックのストア)。将来のある時点でそれを修正します。あなたができる唯一のことの一つは、前の出力に 'Out []'で再アクセスすることです。 – Matt

+0

ブラウズを閉じると*が消えます。それがまだ動作しているかどうかをどのように知ることができますか? – jwillis0720

1

私は今もこの問題に苦労しています。カーネルはサーバー上でジョブを実行し続けますが、ブラウザーを閉じた後にコンソール出力を表示する方法はありません。

私の回避策は、すべてのログをファイルに書き込むことで、ブラウザが終了したとき(実際には多くのログがブラウザを経由してもハングアップする)、ログファイルを開くことでカーネルのジョブプロセスを見ることができますJupyterを使用してログファイルを開くこともできます)。

#!/usr/bin/python 
import time 
import datetime 
import logging 

logger = logging.getLogger() 

def setup_file_logger(log_file): 
    hdlr = logging.FileHandler(log_file) 
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
    hdlr.setFormatter(formatter) 
    logger.addHandler(hdlr) 
    logger.setLevel(logging.INFO) 

def log(message): 
    #outputs to Jupyter console 
    print('{} {}'.format(datetime.datetime.now(), message)) 
    #outputs to file 
    logger.info(message) 

setup_file_logger('out.log') 

for i in range(10000): 
    log('Doing hard work here i=' + str(i)) 
    log('Taking a nap now...') 
    time.sleep(1000) 
関連する問題