Python多线程不会并行执行

时间:2019-03-29 23:47:20

标签: python python-3.x

我已经执行了以下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")是在一个线程中执行的?

1 个答案:

答案 0 :(得分:1)

标准输出可随时写入两个线程,因此,如果一个线程在另一线程的中间将一条线写入标准输出,则将一条线写入标准输出,然后您将看到两个线程的行搞混了。

为避免出现这种竞争状况,可以使用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()