Python多处理:进程不并行运行

时间:2020-04-28 16:37:42

标签: python multithreading

我是新手,学习python中的多处理模块。我尝试运行以下简单代码:

import multiprocessing, time

def print_squares(number):
    for i in range(number):
        print("square of {0} is {1}".format(i , i*i))
        time.sleep(0.1)

def print_cubes(number):
    for j in range(number):
        print("cube of {0} is {1}".format(j, j*j*j))
        time.sleep(0.1)

if __name__ == "__main__":
    process_1 = multiprocessing.Process(target = print_squares, args = (10,))
    process_2 = multiprocessing.Process(target = print_cubes, args = (10,))

    process_1.start()
    process_2.start()

    process_1.join()
    process_2.join()

所以,我遇到了以下麻烦:我希望两个进程通过并行工作来打印混合的立方体和正方形,例如

square of 0 is 0

cube of 0 is 0

square of 1 is 1

cube of 1 is 1

,依此类推。我的脚本没有像描述的那样运行:

cube of 0 is 0
cube of 1 is 1
cube of 2 is 8
cube of 3 is 27
cube of 4 is 64
cube of 5 is 125
cube of 6 is 216
cube of 7 is 343
cube of 8 is 512
cube of 9 is 729
square of 0 is 0
square of 1 is 1
square of 2 is 4
square of 3 is 9
square of 4 is 16
square of 5 is 25
square of 6 is 36
square of 7 is 49
square of 8 is 64
square of 9 is 81

很明显,进程不是并行运行的,第二个进程只有在第一个进程完成后才开始。

此外,当我运行类似的代码但使用线程而不是进程时,它可以按我的要求工作。

我使用Windows 10和python 3.8。感谢您提供任何有关如何解决此问题并使两个流程同时工作的信息,在此先感谢!

1 个答案:

答案 0 :(得分:0)

该代码正确,应该并行运行。这是我的机器上的输出(Linux mint + python3.8):

square of 0 is 0
cube of 0 is 0
square of 1 is 1

也许有一些stdout缓冲,并且打印调用在正确的时间发生,但是流最后被刷新了,请尝试:

print("cube of {0} is {1}".format(j, j * j * j), flush=True)

sys.stdout.flush()