python - Python多处理:进程不并行运行
问题描述
我是在 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。我将不胜感激有关如何解决此问题并使两个进程同时工作的任何信息,在此先感谢!
解决方案
代码是正确的,它应该并行运行。这是我机器上的输出(linux mint + python3.8):
square of 0 is 0
cube of 0 is 0
square of 1 is 1
也许有一些标准输出缓冲,打印调用发生在正确的时间,但流在最后被刷新,试试:
print("cube of {0} is {1}".format(j, j * j * j), flush=True)
或者
sys.stdout.flush()
推荐阅读
- node.js - socket.io 问题。无法连接。前端说连接:假,后端不记录任何东西
- php - PHP Laravel:$request->hasFile() 不工作
- python - 为什么它是本地的,因为我使用的是全局的?
- python - 我是编程新手,我面临着两难境地
- java - 用户输入 Java 的平均计算器 - “java.util.NoSuchElementException: No line found”
- python - 有没有办法在同一行打印 2 个单词之间进行延迟
- amazon-web-services - 默认 PipelineObject 在 AWS DataPipeline 中的外观如何
- python - Dataframe.max() 给出所有 NaN
- javascript - 想要在 xhr POST 请求中将 excel 文件和其他参数从 javascript 发送到 python 服务器
- jenkins - Sidekiq 进程变得繁忙,导致合并请求和注释事件的触发 CI 延迟