0

import multiprocessing as mp
import os

def cube(num):
    print(os.getpid())
    print("Cube is {}".format(num*num*num))

def square(num):
    print(os.getpid())
    print("Square is {}".format(num*num))

if __name__ == "__main__":
    p1 = mp.Process(target = cube, args = (3,))
    p2 = mp.Process(target = square, args = (4,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print("Done")

モジュールを使用していましたmultiprocessingが、それを使用した関数からの出力を印刷できません。

モジュールstdoutを使用してフラッシュを試みました。sys

4

1 に答える 1

0

Q : 「モジュールが目的の結果を生成しないのはなぜですか? 」multiprocessing

なんで?

クラッシュするからです。

問題の MWE/MCVE 表現に間違ったコードがあります。クラッシュします & とは関係ありませんsys.stdout.flush():

>>> cube(  4 )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in cube
NameError: global name 'os' is not defined

解決 :

>>> import os   # be it in the __main__ or in the def()-ed functions...

>>> cube(  4 )
14165
Cube is 64

またmp.Process()、 python-process インスタンスの のレプリカもクラッシュしなくなります。


動作するMCVE:

(base) Fri May 29 14:29:33 $ conda activate py3
(py3) Fri May 29 14:34:55 $ python StackOverflow_mp.py
This is ____6745::__main__
This is ____6746::PID
This is ____6747::PID
Cube(__3) is _______27.
Square(__4) is _______16.
Done.
Works.
Q.E.D.

import multiprocessing as mp
import os
import sys
import time

def cube( num ):
    print( "This is {0:_>8d}::PID".format( os.getpid() ) )
    print( "Cube({0:_>3d}) is {1:_>9d}.".format( num, num*num*num ) )
    sys.stdout.flush()

def square( num ):
    print( "This is {0:_>8d}::PID".format( os.getpid() ) )
    print( "Square({0:_>3d}) is {1:_>9d}.".format( num, num*num ) )
    sys.stdout.flush()

if __name__ == "__main__":
    print( "This is {0:_>8d}::__main__".format( os.getpid() ) )
    p1 = mp.Process( target = cube,   args = (3, ) )
    p2 = mp.Process( target = square, args = (4, ) )
    p1.start()
    p2.start()
    p1.join()
    p2.join()

    time.sleep( 1 )

    print( "Done.\nWorks.\nQ.E.D." )

正確なコードをコピーして貼り付けました。しかし、マルチプロセッシング ライブラリを使用して、呼び出された関数から出力を取得できませんでした
Kartikeya Agarwal 47 分前

それで、
- 新しいターミナル プロセスを開き、 -コマンド
をコピーし、 - ヒットして実行させ、エコシステムを稼働させました。 - 解決策の証明を再度起動し、 - ヒットして実行させました - 前回とまったく同じように動作していることがわかりました。 - 問題は、提供された 2 回 (再) 検証された解決策の側にあるのではないでしょうか? QEDconda activate py3
Enterpython3
python StackOverflow_mp.py
Enter


(py3) Fri May 29 19:53:58 $ python StackOverflow_mp.py
This is ___27202::__main__
This is ___27203::PID
Cube(__3) is _______27.
This is ___27204::PID
Square(__4) is _______16.
Done
于 2020-05-28T18:11:09.780 に答える