是python';什么是同步打印?
python的打印是否同步?:)是python';什么是同步打印?,python,printing,Python,Printing,python的打印是否同步?:) 线程之间。Python的。(Bram Cohen的话,不是我的。)如果您从多个线程调用print,调度程序可能会突发奇想将输出交错。答案是否定的,线程可以相互中断。 但是,可以使用锁来避免这种情况 锁防止线程在全局事务上相互中断(特别是在这里的输出屏幕) 当一个线程想要使用全局对象加锁时,它首先检查锁是否被解锁,如果没有,它会等到它被解锁,然后锁定锁,用全局对象做它想做的事情,最后释放锁 但是,不要只使用标志变量和if检查来实现这一点,线程可以在if语句和锁定之
线程之间。Python的。(Bram Cohen的话,不是我的。)如果您从多个线程调用
print
,调度程序可能会突发奇想将输出交错。答案是否定的,线程可以相互中断。
但是,可以使用锁来避免这种情况
锁防止线程在全局事务上相互中断(特别是在这里的输出屏幕)
当一个线程想要使用全局对象加锁时,它首先检查锁是否被解锁,如果没有,它会等到它被解锁,然后锁定锁,用全局对象做它想做的事情,最后释放锁
但是,不要只使用标志变量和if检查来实现这一点,线程可以在if语句和锁定之间切换。
如果我没记错的话,Python实现了一个锁类threading.lock
另外,请注意,如果没有正确使用锁,可能会遇到死锁或活锁。我现在没有太多的时间,所以我不能在这里解释所有这些,但你可以在谷歌上搜索更多信息,我也会检查一下我是否可以分享我去年大学课程的演示,他们在那里解释得很好。这是一种变通方法。。。它不同步打印,但它是单片的,因此线程之间不会相互重叠 优点:不需要锁定,因此速度更快 缺点:
- 它不同步,并且不能保证事件将按发生的顺序打印。作为一个副作用,如果出现异常,异常文本可能在最后几次打印出来之前开始。它们可能出现在异常文本或堆栈跟踪中间的某个地方。
- 运行循环需要更多的时间和内存
打印是一种语句(在<3.0中)。在什么上同步?在java中同步?您希望它的同步程度如何?当然,在某个时刻,输出是序列化的。我想你期望一个print语句的全部输出都在一起。学习编程不是为了找到答案,而是要学会很好地框定问题,使答案本身可能非常明显。比这更糟糕的是,如果你从多个线程调用
print
,Python的IO层中的不同步缓冲会导致输出从其他线程打印多次。啊,这比我想象的还要糟糕。
import threading, time
class SomeThread(threading.Thread):
def __init__(self, name):
super().__init__()
self.name = name
...
def mono_print(self, *v):
p = time.strftime("%Y-%m-%d %H:%M:%S") + ' ' + self.name
for s in v:
p += ' ' + str(s)
print(p + '\n', end='', flush=True)
def run(self):
self.mono_print('thread is running.')
...
self.mono_print('something', 'them something else')
...
self.mono_print('processed')