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 -процесса тоже перестанут давать сбой.
Работающий 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 минут a go
Итак,
- я открыл новый процесс терминала,
- я скопировал команду conda activate py3
и
- я нажал Enter , чтобы он запустился, поэтому как сделать python3
экосистему go живую.
- Я снова запустил доказательство решения python StackOverflow_mp.py
и
- Я нажал Введите , чтобы запустить
- Я видел, как это работает точно так же, как и в прошлый раз.
- Я сомневаюсь, что проблема находится на стороне предоставленного дважды (повторно) подтвержденного доказательства решения, не так ли?
QED
(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