Python多线程实现模拟火车站售票
作者:程序员攻略 发布时间:2021-09-20 03:23:49
标签:python,火车站,售票
本文实例为大家分享了Python多线程模拟火车站售票的具体代码,供大家参考,具体内容如下
Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装。
我们使用threading这个高级模块, 模拟火车站卖票,如果不加锁,卖出同一张票:
import threading
from time import sleep, ctime
N = 100 # 100张票
def Sell(name):
global N
while True:
if N>0:
sleep(0.1) #加入此句,可以让线程卖出第0张票或同一张票
print("{}卖出第{}张票!\n".format(name,N))
N=N-1
def main():
threads = {}
for i in ( "A" ,"B" ):
# 实例化每个 Thread 对象,把函数和参数传递进去,返回 Thread 实例
t = threading.Thread(target=Sell, args=( i ,))
threads[i]=t # 分配线程
for i in ("A" ,"B"):
threads[i].start() # 开始执行多线程
for i in ("A" ,"B"):
threads[i].join() # 等待线程结束或超时,然后再往下执行
print("程序结束!")
if __name__ == '__main__':
main()
运行效果:
我们使用锁来避免卖出同一张票,当多个线程同时执行lock.acquire()时,只有一个线程能成功地获取锁,然后继续执行代码,其他线程就等待直到获得锁为止。用try...finally来确保锁一定会被释放。
import threading
from time import sleep, ctime
N = 100 # 100张票
lock = threading.Lock()
def Sell(name):
global N
while True:
lock.acquire()
try:
if N>0:
sleep(0.1) #加入此句,可以让线程卖出第0张票或同一张票
print("{}卖出第{}张票!\n".format(name,N))
N=N-1
finally:
# 改完了一定要释放锁:
lock.release()
def main():
threads = {}
for i in ( "A" ,"B" ):
# 实例化每个 Thread 对象,把函数和参数传递进去,返回 Thread 实例
t = threading.Thread(target=Sell, args=( i ,))
threads[i]=t # 分配线程
for i in ("A" ,"B"):
threads[i].start() # 开始执行多线程
for i in ("A" ,"B"):
threads[i].join() # 等待线程结束或超时,然后再往下执行
print("程序结束!")
if __name__ == '__main__':
main()
运行效果:
来源:https://blog.csdn.net/HQ354974212/article/details/89603615


猜你喜欢
- 注:本文所说的视觉设计师专指网页视觉设计师。网页设计师与平面设计师都归类为设计师,其实这两个职业是跨行业的,虽然有很多设计师一直在跨行业工作
- 在web自动化测试中,测试工程师经常会碰到frame表单嵌套结构,直接定位会报错,我们需要切换表单后才能成功定位。我拿QQ邮箱登录来作为例子
- 本文实例讲述了Python读取properties配置文件操作。分享给大家供大家参考,具体如下:工作需要将Java项目的逻辑改为python
- 使用python画图,发现生成的图片在console里。不仅感觉很别扭,很多功能也没法实现(比如希望在一幅图里画两条曲线)。想像matlab
- 如下所示:public function a(){ return $this->belongsTo('App\Mo
- SQL语句举例:SELECT * FROM `test` WHERE `id`=1;当我们输入一条SQL语句,返回一个结果时,那这条语句在
- 我们以用户查询语句为 https://www.aspxhome.com/chunfeng.asp为例来查询用户资料将从数据库Contact1
- 又是一年春来到,看各大网站的新年Logo也成为了我们必不可少的新年餐点,为此,我们特别整理了部分网站的新年Logo秀,如果你看到了更加有意思
- 在整个产品设计的过程中,视觉设计与交互设计的“工序”非常紧密,两者关系也是相辅相成,互相影响。而视觉界面作为最直接与用户交流的层面,如何把交
- pip简介pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能pip是官方推荐的
- 学习目的 学会SQL中的占位符用法 在鲸鱼这几天忙死了,好几天没写了,真对不起各位。这几天让XHTML闹得不开心,虽然以前也知道这个,但没太
- 最近合成大西瓜非常火,很多编程爱好者将大西瓜改成了各种版本,非常魔性,哈哈。如果你也想魔改大西瓜,或者想研究一下项目怎么玩的,下面的教程从下
- 本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下:本文内容:socketserve
- 通过exec可以执行动态Python代码,类似Javascript的eval功能;而Python中的eval函数可以计算Python表达式,
- 本文实例为大家分享了vue实现验证码倒计时按钮的具体代码,供大家参考,具体内容如下1、点击“发送验证码”按钮后进行逻辑判断:▶️ 如果邮箱已
- 这是一个特别简单的用原生js实现的一个小鸟游戏,比较简单,适合新手练习。html结构<div id="game"&
- 一、xpath:基本属性定位上一篇文章讲了通过元素的id、name、class这些属性定位的用户,使用xpath方法结合元素属性也可以很准确
- 兼容主流浏览器,独立样式表,可以很方便的进行视觉效果自定义截图:模拟下拉菜单演示代码:<!DOCTYPE html PUBLIC &q
- 本文实例讲述了JavaScript获取中英文混合字符串长度的方法。分享给大家供大家参考,具体如下:JavaScript获取中英文混合字符串的
- 红包分配算法代码实现发给大家,祝红包大丰收!#coding=gbkimport randomimport sys#print random.