gpt4 book ai didi

具有奇怪输出错误的 Python 线程

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:01 26 4
gpt4 key购买 nike

总的来说,我是线程的新手,并且一直在尝试不同的想法来让自己站稳脚跟。但是,我遇到了一些我不确定如何解释的事情。这是代码:

import threading, datetime
class ThreadClass(threading.Thread):
def run(self):
for _ in range(3):
now = datetime.datetime.now()
print "%s: %s" %(self.getName(), now)

for i in range(2):
t = ThreadClass()
t.start()

该程序完全符合我的要求,但是,输出中存在一些随机错误。

Thread-1: 2016-10-12 17:34:23.012462
Thread-1: 2016-10-12 17:34:23.012802
Thread-2: 2016-10-12 17:34:23.013025
Thread-2: 2016-10-12 17:34:23.013108

Thread-2: 2016-10-12 17:34:23.013225
Thread-1: 2016-10-12 17:34:23.013252

错误相对一致(即输出中出现相同的空格和新行,只是在不同的地方)。我怀疑这与尝试几乎同时写入输出流的线程有关,但在这个特定的运行中,这两个错误都发生在 Thread-2 运行时。

非常感谢任何帮助描述为什么会出现此问题!

我正在 Ubuntu 14.04(双核 CPU)上使用 Python 2.7 运行这段代码,如果这会有什么不同的话。

最佳答案

补充Joseph的回复,可以用Semaphore

from threading import Semaphore
writeLock = Semaphore(value = 1)

...

当您要在线程中打印时:

writeLock.acquire()
print ("%s: %s" %(self.getName(), now))
writeLock.release()

writeLock 确保在 release() 之前的任何时刻只有一个线程可以打印。

将Semaphore想象成“蝇王”中的海螺,只有拿到它的人才能说话。当第一个演讲者结束时,他将其交给下一个演讲者。

关于具有奇怪输出错误的 Python 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com