Python 个线程和字符串

Python threads and strings

我是线程和多处理的新手。我有一些代码,我在其中启动了一个进程,我希望输出显示类似这样的活动等待状态

wating....

代码与下面类似:

导入线程 导入时间

class ThreadExample(object):

    def __init__(self):
        self.pause = True
        threading.Thread(target=self.second_thread).start()
        #  Some other processes
        print("Waiting", end="")
        while self.pause:
            time.sleep(1)
            print(".", end="")
        print("Hooray!")

    def second_thread(self):
        print("timer started")
        time.sleep(3)
        self.pause = False
        print("timer finished")

if __name__ == "__main__":
    ThreadExample()

当我运行上面的代码时,我收到输出:

timer started
Do something else..timer finished
.
Hooray!

没什么大惊小怪的,只是只有 'timer started' 出现在开头,其余文字瞬间出现在结尾。

如果我将 print(".", end="") 行更改为 print("."),我会收到以下输出:

timer started
Do something else.
.
timer finished
.
Hooray

圆点以 1 秒为增量出现,这是我的意图。

有没有办法让 'Waiting...' 在一行中没有 end=""?

其次,我猜这与 print() 函数的内部结构有关,如果不是,我是否应该以其他方式执行线程?我不认为问题出在 GIL 上,因为我已经尝试 multiprocess.Process 并得到了相同的结果。

这可能是由于 print 缓冲。它在 \n 和其他一些情况下(如缓冲区溢出或程序退出)被刷新。而不是 print 试试这个:

import sys

def unbuffered_print(msg):
    sys.stdout.write(msg)
    sys.stdout.flush()

...
unbuffered_print('.')

无处不在。