Saf*_*ren 6 python python-multiprocessing
我有一个脚本,我正在加载一个文件,这需要一段时间,因为有很多数据要读取,并防止用户终止我希望显示某种加载指示的过程.我认为这是学习如何使用多处理模块的好机会,所以我写了这个例子来测试模块:
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
Run Code Online (Sandbox Code Playgroud)
当我在windows cmd中运行它时,它可以正常工作,它会打印"正在加载"并按顺序添加点,直到加载程序完成.但是在我需要它工作的unix中,我没有从进度函数,进程p1获得任何输出.
正如 Mark 和 Dacav 所建议的那样,缓冲是问题所在。以下是一些可能的解决方案:
用于python -u运行脚本
python -u将取消缓冲标准输出和标准错误。如果您可以接受,这是最简单的解决方案。
使用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
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |