web-dev-qa-db-ja.com

マルチプロセッシング印刷出力なし(Spyder)

私のコードは簡単に並列化できると思うので、最近、マルチプロセッシングについて詳しく調べ始めました。ただし、チュートリアルを進めていると、プールに分散された関数が印刷されないように見えるという問題が発生しました。

ここに犯人があります:

__spec__ = None # This line is required for Spyder and not part of the actual example

from multiprocessing import Process
import os

def info(title):
    print(title)
    print('module name:', __name__)
    print('parent process:', os.getppid())
    print('process id:', os.getpid())

def f(name):
    info('function f')
    print('hello', name)

if __name__ == '__main__':
    info('main line')
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()

私が受け取る出力は次のとおりです。

main line 
module name: __main__ 
parent process: 10812 
process id: 11348*

これで、コンソールがinfo関数のみを出力し、f関数(multiprocessing.Processを使用している)の出力は出力しないように見えることは明らかです。オンラインで見つけた他の例でも同様の問題が発生しました。マルチプロセッシングを使用すると計算が正しく行われて返されますが、コンソールに印刷が表示されません。

なぜ誰かが、この問題に対処する方法を知っていますか?

関連する可能性のあるメモで、私はPython 3.6 in Spyder 3.2.4を使用しています。Spyderにはいくつかの癖があるようです。コードの最初の行はすでにマルチプロセッシングを可能にするために必要な回避策であるためですまったく動作しますが、私がすでに議論した問題 ここ 。同様の未解決の問題が言及されました ここ

皆様のお力添えとあけましておめでとうございます。

13
J.Galt

Spyderメンテナはこちら)SpyderのIPythonコンソールのWindowsでは、マルチプロセッシングがうまく機能しません。ただし、コードを外部ターミナルで実行して、必要な結果を得ることができます。

そのためには、

Run > Configuration per file > Execute in an external system terminal

16
Carlos Cordoba

代わりにログファイルを使用できます。 fp.write()の使用