python多线程解决数据安全问题
python多线程解决数据安全问题
在使用多线程处理问题,可能会遇到以下情况,一个车站售卖100张车票,有三个窗口同时售卖,怎么保证票被卖出,该编号票显示已售卖,其他窗口只能售卖其他票,
遇到的问题:发现多线程购买车票时,在每个线程都分别卖出了100张车票
import random
import threading
import time
#创建售卖车票的函数
#创建车票总量
ticket=100
def seal():#声明全局变量global ticket#车票大于0则可以售卖while ticket>=1:#显示线程名字,票的余量print(threading.currentThread().getName().ticket)#票-1ticket-=1
#创建三个线程,同时运行seal函数
for i in range(3):thread=threading.Thread(target=seal,name="线程{0}".format(i+1))thread.start()
遇到的问题
我们发现同一张票被多个线程售卖
怎么解决这个安全性问题
虽然在售卖票是多线程的,我们只需要保证在处理修改总票数的地方保证每次只能一个线程执行,执行完成之后,才能放下一个线程进来处理即可,我们需要在一开始给程序上锁,等程序结束后,将锁结束,这样就保证,一开始是三个线程一起进来,谁先抢到锁,谁就先执行,执行完成后,解锁,重复刚才步骤,即可解决问题用到的技术
def seal():global ticketglobal locktime.sleep(random.randint(1,5))#lock.acquire()while ticket>0:#print(threading.active_count())#获得锁对象time.sleep(random.randint(1, 3))lock.acquire()time.sleep(random.randint(1, 2))print(threading.currentThread().getName(),ticket)ticket-=1if ticket==0:lock.release()breaklock.release()#lock.release()
这边注意,在循环内部,lock.acquire()上锁的意思
lock.release()解锁的意思。
为什么要加等待不同秒数呢,保证不同的线程进入时间不同,防止死锁
python多线程解决数据安全问题相关推荐
- 区块链如何解决数据安全问题?
众所周知,区块链技术是互联网技术新的发展,区块链技术来源于比特币的应用.区块链先是受到金融界和科技届的广泛关注,近两年来,逐渐在各大领域落地应用. 我们身处大数据和互联网时代,只要你上网浏览,就会产生 ...
- python—多线程之数据混乱问题
一.加入线程同步的原因 由于同一进程中的所有线程都是共享数据的,如果对线程中共享数据的并发访问不加以限制,结果将不可预期,在严重的情况下,还会产生死锁 在一个进程内的所有线程共享全局变量,能够在不使用 ...
- python多线程爬虫数据顺序_多线程爬取小说时如何保证章节的顺序
前言 爬取小说时,以每一个章节为一个线程进行爬取,如果不加以控制的话,保存的时候各个章节之间的顺序会乱掉. 当然,这里说的是一本小说保存为单个txt文件,如果以每个章节为一个txt文件,自然不会存在这 ...
- python多线程爬虫数据顺序_Python爬虫必学知识点:多线程爬虫
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:黑白之道 什么是线程 线程(Thread)也叫轻量级进程,是操作系统 ...
- java多线程【线程安全问题】
(一)问题描述 我们 先通过代码案例看线程执行过程中会发生那些安全问题 模拟电影院卖票: 某电影院目前正在上映国产大片,共有100张票,而它有3个平台卖票,请设计一个程序模拟该电影院卖 ...
- 315再曝数据安全问题,短信钓鱼、App窃密等成焦点
有到一年315,和预想的一样,今年315又曝光了数据隐私安全乱象.APP过度收集信息.大数据杀熟.黑灰产攻击.人为倒卖等安全问题成为社会焦点. 一.不法分子向受害者发送钓鱼短信.不法者通过" ...
- hash是线程安全的吗?怎么解决?_这次进程、线程、多线程和线程安全问题,一次性帮你全解决了...
1. 什么是进程 一个软件,在操作系统中运行时,我们称其为进程. 进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元. 2. 什么是线程 在一个进程中,每个独立的功能都需要独立的去运行,这 ...
- python多线程读取数据库数据_python多线程操作MySQL数据库pymysql
python多线程操作MySQL数据库pymysql 项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, "),原因是pymysql的exec ...
- 【Python网络编程和并发-多线程共享数据混乱引出同步锁】
38_第五章-多线程共享数据混乱引出同步锁 一.上节回顾 总结 在一个进程内的所有线程共享全局变量,能够在部使用其他方式的前提下完成多线程之间的数据共享(这点要比多进程更好) 缺点就是,线程对全局变量 ...
最新文章
- 详细记录python的range()函数用法
- 两种 js下载文件的方法(转)
- 光流 | 基于Matlab实现Lucas-Kanade方法:方法2(附源代码)
- Docker容器间Link单向通信
- CordovaWebViewImpl
- Redis的key和value大小限制
- [Java基础]Random
- Spring RestTemplate 访问https站点
- java GC垃圾回收
- NUC1333 Knight Moves【DFS】
- mysql忘记密码时如何修改root用户密码
- 液压阀的“通”和“位”
- linux设置ipsan_linux 配置SAN存储-IPSAN
- 在线php中文手册,JavaScript中文参考手册
- no input file specified 三种解决方法
- 游戏开发——Gris日志 day01
- java微信登录_java微信授权登陆
- C语言中删除重复字母,删除C ++中的重复字母
- 混凝土骨料微观结构数学物理模型建模
- IBIS建模——第2部分:为何以及如何创建您自己的IBIS模型
热门文章
- chi square-卡方分布的定义及性质
- 智慧矿山 | 基于钻孔数据的三维地质模型可视化
- ferguson博弈_人物介绍!扑克界传奇人物“耶稣”Chris Ferguson
- anaconda matplotlib绘图中文乱码解决
- Bayesian Nonparametric Learning of Cloth Models for Real-Time State Estimation
- no cortex-m sw device found 问题解决【转】
- Html 标签详细整理
- 思考乐教育的荣耀与忧虑:整体增速放缓,异地扩张未见成效
- linux简单服务器的配置
- 设计模式之门面模式与装饰器模式详解和应用