确保每个打印在线程时都在换行符上,在 python 中无限期

Posted

技术标签:

【中文标题】确保每个打印在线程时都在换行符上,在 python 中无限期【英文标题】:Make sure each print is on a newline when threading, indefinitely in python 【发布时间】:2022-01-20 13:50:55 【问题描述】:

只是一个小问题。

我正在使用大约 6 个线程,所有这些线程都每隔几秒钟打印一次。 有时它们会像这样打印在同一行:

OUTPUT
OUTPUT
OUTPUTOUTPUT

OUTPUT
OUTPUT

如您所见,这会留下一个空行和一个双打印。有没有办法可以确保这不会发生。我看到一句话:

print("OUTPUT", end="\n")

这不起作用,所以我又回到堆栈溢出!

【问题讨论】:

您在执行此操作时是否收到任何错误消息? 你可以这样写:print("OUTPUT\n") @MohammadKhoshbin 那行不通。它只是在每次打印之间留出一个间隙。 这能回答你的问题吗? Python : printing in multiple threads 【参考方案1】:

管理此问题的一种方法是使用包装函数进行打印并使用 threading.Lock。这是一个例子:

from threading import Thread, Lock
import time

LOCK = Lock()

def doprint(msg):
    with LOCK:
        print(msg)

def athread():
    doprint('Thread is starting')
    time.sleep(0.1)
    doprint('Thread is ending')

threads = []

for _ in range(10):
    t = Thread(target=athread)
    t.start()
    threads.append(t)

for t in threads:
    t.join()

这样,print() 只能被成功获取锁的线程调用

【讨论】:

以上是关于确保每个打印在线程时都在换行符上,在 python 中无限期的主要内容,如果未能解决你的问题,请参考以下文章

确保混合 MPI / OpenMP 在不同的内核上运行每个 OpenMP 线程

如何在打印语句后取消换行符?

python 在Python中打印换行符

Python如何在包含' n'的行中打印带有换行符的文本

在 Python 中,当一个单词在行时打印一个换行符

不要同时在两个线程之间共享相同的套接字