• 技术文章 >Python技术 >Python基础教程

    Python如何实现条件变量同步

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-07-06 09:07:03原创2366

    条件变量同步

    有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait()、notify()、notifyAll()方法。

    lock_con=threading.Condition([Lock/Rlock]): 锁是可选选项,不传人锁,对象自动创建一个RLock()。

    wait():条件不满足时调用,线程会释放锁并进入等待阻塞;

    notify():条件创造后调用,通知等待池激活一个线程;

    notifyAll():条件创造后调用,通知等待池激活所有线程。

    相关推荐:《Python视频教程

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    import threading, time

    from random import randint

    class Producer(threading.Thread):

        def run(self):

            global L

            while True:

                val = randint(0, 100)

                print('生产者', self.name, ':Append'+str(val),L)

                if lock_con.acquire():

                    L.append(val)

                    lock_con.notify()

                    lock_con.release()

                time.sleep(3)

    class Consumer(threading.Thread):

        def run(self):

            global L

            while True:

                lock_con.acquire()

                if len(L) == 0:

                    lock_con.wait()

                print('消费者', self.name, ":Delete" + str(L[0]), L)

                del L[0]

                lock_con.release()

                time.sleep(0.25)

    if __name__ == "__main__":

        L = []

        lock_con = threading.Condition()

        threads = []

        for i in range(5):

            threads.append(Producer())

        threads.append(Consumer())

        for t in threads:

            t.start()

        for t in threads:

            t.join()

        print('---- end ----')

    运行结果:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    生产者 Thread-1 :Append63 []

    生产者 Thread-2 :Append66 [63]

    生产者 Thread-3 :Append20 [63, 66]

    生产者 Thread-4 :Append83 [63, 66, 20]

    生产者 Thread-5 :Append2 [63, 66, 20, 83]

    生产者 Thread-4 :Append26 []

    消费者 Thread-6 :Delete26 [26]

    生产者 Thread-2 :Append21 []

    生产者 Thread-3 :Append71 [21]

    生产者 Thread-1 :Append19 [21, 71]

    生产者 Thread-5 :Append100 [21, 71, 19]

    生产者 Thread-1 :Append96 []

    消费者 Thread-6 :Delete96 [96]

    ........

    专题推荐:python 条件变量同步
    上一篇:Python中元祖的用法 下一篇:Python如何实现线程条件同步

    相关文章推荐

    • Python之requests模块相关介绍

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网