美文网首页Python作业
Day20 数据安全

Day20 数据安全

作者: 风月辞寒 | 来源:发表于2019-08-19 20:19 被阅读0次

    一.线程间数据共享

    数据的存储跟线程无关; 一个进程中的数据在多个线程中可以直接用
    情况1: 在子线程中使用主线程中的数据

    list1 = [10, 20, 30]
    
    
    def func1():
        list1.append(100)
    
    
    def func2():
        list1[0] = 'hello'
    
    
    t1 = Thread(target=func1)
    t2 = Thread(target=func2)
    t1.start()
    t2.start()
    
    t1.join()
    t2.join()
    print(list1)
    

    情况2: 在子线程中使用子线程中的数据

    list1 = [10, 20, 30]
    
    
    def func1():
        global list1
        list1 = [1, 2, 3]
    
    
    def func2():
        t = Thread(target=func1)
        t.start()
        print(list1)
    
    
    t1 = Thread(target=func2)
    t1.start()
    
    

    二.数据共享安全问题以及锁的使用

    获取锁对象
    获取数据
    操作完成后
    释放锁对象

    注意: 使用锁的时候保证一个数据对应一把锁

    from time import sleep
    from threading import Thread, Lock
    
    
    class Account:
        """银行账号"""
        _card_num = 0
    
        def __init__(self, name, tel, balance, bank='建设银行'):
            self.bank = bank
            self._card_num += 1
            self.name = name
            self.tel = tel
            self.balance = balance
            self.lock = Lock()      # 1.创建锁
    
        def save_money(self, amount):
            # 获取余额
            print('=========开始存钱!============')
            # 2.使用锁
            self.lock.acquire()
            # 存钱
            bl = self.balance
            print('余额:%s' % bl)
            sleep(4)
            self.balance += amount
            # 3.释放锁
            self.lock.release()
            print('存钱:{}, 余额:{}'.format(amount, self.balance))
            print('========存钱结束!==========')
    
        def draw_money(self, amount):
            print('=======开始取钱!=========')
            self.lock.acquire()
            bl = self.balance
            print('余额:%s' % bl)
            sleep(10)
            if bl < amount:
                print('余额不足!!!')
                print('======取钱结束======')
                return
            self.balance -= amount
            self.lock.release()
            print('取钱:{}, 余额:{}'.format(amount, self.balance))
            print('========取钱结束========')
    
    
    account = Account('xh', '12345', 10)
    
    t1 = Thread(target=account.save_money, args=(5,))
    t2 = Thread(target=account.draw_money, args=(5,))
    t1.start()
    t2.start()
    

    相关文章

      网友评论

        本文标题:Day20 数据安全

        本文链接:https://www.haomeiwen.com/subject/heaesctx.html