gpt4 book ai didi

python - 在unix中只有一个进程打印,多处理python

转载 作者:太空狗 更新时间:2023-10-30 00:10:31 24 4
gpt4 key购买 nike

我有一个脚本,我正在加载一个文件,这需要一段时间,因为有很多数据要读取,并且为了防止用户终止我想显示某种加载指示的进程。我认为这是学习如何使用多处理模块的好机会,所以我写了这个例子来测试该模块:

import time, multiprocessing

def progress():
delay = 0.5
while True:
print "Loading.",
time.sleep(delay)
print "\b.",
time.sleep(delay)
print "\b.",
time.sleep(delay)
print "\r \r",

return

def loader(filename, con):
# Dummy loader
time.sleep(5)
con.send(filename)
con.close()
return

if __name__ == "__main__":
parrent_con, child_con = multiprocessing.Pipe()
filename = "main.key"

p1 = multiprocessing.Process(target=progress)
p2 = multiprocessing.Process(target=loader, args=(filename, child_con))

p1.start()
p2.start()

data = parrent_con.recv()
p1.terminate()
print "\n", data

当我在 Windows cmd 中运行它时,它按预期工作,它打印“正在加载”并依次添加点,直到加载程序完成。但是在我需要它工作的 unix 中,我没有从进程函数 p1 中得到任何输出。

最佳答案

正如 Mark 和 Dacav 所建议的,缓冲是问题所在。以下是一些可能的解决方案:

  • 使用python -u 运行脚本

    python -u 将取消缓冲 stdout 和 stderr。如果您可以接受,这是最简单的解决方案。

  • 使用 sys.stdout.flush

    sys.stdout.flush 将从缓冲区刷新标准输出。

    delay = 0.5
    while True:
    print("Loading."),
    sys.stdout.flush()
    time.sleep(delay)
    print("\b."),
    sys.stdout.flush()
    time.sleep(delay)
    print("\b."),
    sys.stdout.flush()
    time.sleep(delay)
    print("\r \r"),
    sys.stdout.flush()
    return

关于python - 在unix中只有一个进程打印,多处理python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30253141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com