我正在用Python脚本进行线程处理,它会以各种顺序输出内容,但是,我想打印出一个"Remaining:x ",然后在下一个print语句之前擦除该行。所以基本上,我尝试实现一个进度/状态更新,它在下一个print语句之前擦除自己。
我有这样的东西:
for i in range(1,10):
print "Something here"
print "Remaining: x"
sleep(5)
sys.stdout.write("\033[F")
sys.stdout.write("\033[K")
当你按原样打印出来的时候,这很好用;然而,一旦实现了线程化,"Remaining"文本就不会一直被清除,有时在它清除前一行之前,您会得到另一个"Something here"。
只是想找出用多线程组织我的进度/状态文本的最佳方法。
2条答案
按热度按时间ycl3bljg1#
由于您的代码不包含任何线程,因此很难就您做错了什么给出具体的建议。
如果输出排序困扰着你,那么你应该学习锁,让线程共享一个锁,这样就可以获取锁(这样其他人就不能),发送你的输出,在释放锁之前刷新流。
但是,代码的结构化方式使这一点变得困难,因为当您有多个线程写入输出时,没有办法保证光标总是在特定位置结束。
p8ekf7hl2#
正如前面的评论者提到的,您可以使用互斥锁(RLock)对象来序列化访问。