Python线程锁

发布时间:2019-09-19 08:02:35编辑:auto阅读(1595)


    多线程的优势

    可以同时运行多个任务

    但是当多个线程同时访问共享数据时,可能导致数据不同步,甚至错误!

    so,不使用线程锁, 可能导致错误


    购买车票--线程锁

    [root@~]# cat test.py 

    #-*- coding:utf-8 -*-
    import threading
    import time
     
    tickets = range(1,10)
     
    def buy_ticket(station):
        while  True:
    mylock.acquire()      #加线程锁
    if len(tickets) == 0:
                mylock.release()  #释放线程锁, 不要带锁结束线程
    break;
    ticket = tickets[-1]
    time.sleep(1)
    print "%s买到票No.%d" %(station, ticket)
    del tickets[-1]
    mylock.release()      #释放线程锁
    time.sleep(1)
     
    class MyThread(threading.Thread):
    def __init__(self, station):
    threading.Thread.__init__(self)
    self.station = station
    #线程启动后,会执行self.run()方法
    def run(self):
    buy_ticket(self.station)
     
    # 创建一个线程锁
    mylock = threading.Lock()
     
    # 创建新线程t1
    t1 = MyThread("广州")
    t2 = MyThread("深圳")
     
    t1.start()    #启动线程
    t2.start()
    print "线程启动完毕"
     
    print 'end.'


    结果:

    [root@~]# python test.py 

    捕获.PNG


关键字