gpt4 book ai didi

Python多线程不是并行执行的

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:59 24 4
gpt4 key购买 nike

我已经执行了以下 Python 代码。

from time import sleep
from threading import *

class myclass1(Thread):
def run(self):
for i in range(5):
print("aaa")
sleep(1)

class myclass2(Thread):
def run(self):
for i in range(5):
print("bbb")
sleep(1)

mc1 = myclass1()
mc2 = myclass2()

mc1.start()
mc2.start()

输出包含“aaabbb”。

aaa
bbb
aaabbb

aaa
bbb
aaa
bbb
aaa
bbb

我不明白为什么结果包含“aaabbb”。这是否意味着 print("aaabbb") 是在一个线程中执行的?

最佳答案

标准输出在任何时候都可以写入两个线程,所以如果一个线程在另一个线程向标准输出写入一行的中间向标准输出写入一行,那么您会看到来自两个线程的行得到混在一起。

为避免这种竞争情况,您可以使用 threading.Lock 来确保每次始终只有一个线程可以调用 print,并且另一个线程将被阻塞,直到 print 返回后释放锁:

from time import sleep
from threading import *

class myclass(Thread):
def __init__(self, name, lock, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = name
self.lock = lock
def run(self):
for i in range(5):
with self.lock:
print(self.name)
sleep(1)

lock=Lock()
mc1 = myclass('aaa', lock)
mc2 = myclass('bbb', lock)

mc1.start()
mc2.start()

关于Python多线程不是并行执行的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55426782/

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