在Python中使用线程前进点

在Python中使用线程前进点,python,multithreading,progress-bar,python-multithreading,Python,Multithreading,Progress Bar,Python Multithreading,我试图用Python创建一个线程,只要它不能得到正确的答案(HTTP get),它就会轮询某个服务器。为了提供方便的文本界面,我想打印进度点。每次连接尝试都会出现另一个点,直到连接完成(或者每隔一秒等待一个点) 我发现了这样的东西: 在本例中,我们有上下文管理器: with Ticker("A test"): time.sleep(10) 我不确定我是否正确理解这一点。我想做一些类似的事情: with Ticker("A test: "): result = -1

我试图用Python创建一个线程,只要它不能得到正确的答案(HTTP get),它就会轮询某个服务器。为了提供方便的文本界面,我想打印进度点。每次连接尝试都会出现另一个点,直到连接完成(或者每隔一秒等待一个点)

我发现了这样的东西:

在本例中,我们有上下文管理器:

with Ticker("A test"):
    time.sleep(10)
我不确定我是否正确理解这一点。我想做一些类似的事情:

with Ticker("A test: "):      
    result = -1
    while result != 0:
        result = poll_server()
    print "Finished."
但这是行不通的。有什么想法吗


干杯

Python缓冲了您的输出,一次会出现很多点。解决这个问题的一种方法是导入sys并使用它:每当你想打印一个点时,说:

sys.stdout.write(".")
sys.stdout.flush()

刷新使点立即出现。

Python缓冲您的输出,因此一次会出现许多点。解决这个问题的一种方法是导入sys并使用它:每当你想打印一个点时,说:

sys.stdout.write(".")
sys.stdout.flush()
齐平使圆点立即出现。

#/usr/bin/python3
导入系统
导入时间
def进度(消息):
i=0
尽管如此:
dots=“”
i=(i%3)+1
点+=“*”i+“*(3-i)
sys.stdout.write(“\r{}”.format(消息+点))
sys.stdout.flush()
i+=1
睡眠时间(0.3)
如果名称=“\uuuuu main\uuuuuuuu”:
进展(“等待”)
更有用的示例:

#/usr/bin/python3
导入系统
导入时间
def进度_gen(消息):
i=0
尽管如此:
对于范围(0,4)内的x:
圆点=“.”*x
sys.stdout.write(“{}\r.”格式(消息+点))
i+=1
睡眠时间(0.5)
sys.stdout.write(“\033[K”)
产量
如果名称=“\uuuuu main\uuuuuuuu”:
p=进展情况(“等待”)
对于范围(1100)内的x:
下一个(p)
如果x==3:
打破
打印(“完成”)
您可以在线测试它:

#!/usr/bin/python3
导入系统
导入时间
def进度(消息):
i=0
尽管如此:
dots=“”
i=(i%3)+1
点+=“*”i+“*(3-i)
sys.stdout.write(“\r{}”.format(消息+点))
sys.stdout.flush()
i+=1
睡眠时间(0.3)
如果名称=“\uuuuu main\uuuuuuuu”:
进展(“等待”)
更有用的示例:

!/usr/bin/python3
导入系统
导入时间
def进度_gen(消息):
i=0
尽管如此:
对于范围(0,4)内的x:
圆点=“.”*x
sys.stdout.write(“{}\r.”格式(消息+点))
i+=1
睡眠时间(0.5)
sys.stdout.write(“\033[K”)
产量
如果名称=“\uuuuu main\uuuuuuuu”:
p=进展情况(“等待”)
对于范围(1100)内的x:
下一个(p)
如果x==3:
打破
打印(“完成”)

你可以在线测试:

第一个例子有效,第二个不有效吗?以什么方式无效?什么是轮询服务器,它调用C代码?第一个例子有效,第二个不有效吗?以什么方式无效?轮询服务器,它调用C代码吗?