Python多线程的同步应用操作

首先解释下什么是同步:

同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。

"同"字从字面上容易理解为一起动作

其实不是,"同"字应是指协同、协助、互相配合。

如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。

from threading import Thread, Lock
import time


class Test1(Thread):
    def __init__(self):
        Thread.__init__(self)

    def run(self):
        while True:
            # 虽然是while true但是test1的输出也不会多,因为当第二次循环时锁已经被第一次占用了,不在t3释放无法重新获取锁
            if lock1.acquire():
                print('----test1----')
                time.sleep(0.8)
                lock2.release()


class Test2(Thread):
    def __init__(self):
        Thread.__init__(self)

    def run(self):
        while True:
            if lock2.acquire():  # 因为第二把锁已经在下方上了锁,所以需要等着被解锁后才能抢到锁执行
                print('----test2---')
                time.sleep(0.8)
                lock3.release()


class Test3(Thread):
    def __init__(self):
        Thread.__init__(self)

    def run(self):
        while True:
            if lock3.acquire():  # 因为第三把锁已经在下方上了锁,所以需要等着被解锁后才能抢到锁执行
                print('----test3----')
                time.sleep(0.8)
                lock1.release()


if __name__ == '__main__':
    lock1 = Lock()  # 使用lock方法创建的锁默认没有锁上
    # lock1.acquire()  # 第一把锁不能在这里上锁,因为2和3都上了锁,线程运行时不能获取到锁后使其运行
    lock2 = Lock()
    lock2.acquire()  # 创建第二把锁并且锁上
    lock3 = Lock()
    lock3.acquire()  # 创建第三把锁并且锁上

    t1 = Test1()
    t2 = Test2()
    t3 = Test3()

    t1.start()
    t2.start()
    t3.start()

返回:

----test1----
----test2---
----test3----
----test1----
----test2---
----test3----
----test1----
----test2---
----test3----
----test1----

总结

  • 可以使用互斥锁完成多个任务,有序的进程工作,这就是线程的同步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值