Python多线程实现模拟火车站售票
作者:程序员攻略 时间:2021-09-20 03:23:49
本文实例为大家分享了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
标签:python,火车站,售票
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
FF下,用 col 隐藏表格列的方法详解!
2008-04-02 11:35:00
使用Python中OpenCV和深度学习进行全面嵌套边缘检测
2021-04-21 10:21:34
![](https://img.aspxhome.com/file/2023/0/67420_0s.jpg)
python修改包导入时搜索路径的方法
2023-05-12 07:40:23
django框架实现一次性上传多个文件功能示例【批量上传】
2022-03-30 09:00:43
![](https://img.aspxhome.com/file/2023/7/66767_0s.png)
详解Python中的正斜杠与反斜杠
2021-06-28 08:38:10
python中hashlib模块用法示例
2023-03-20 12:20:13
python生成指定长度的随机数密码
2021-01-24 23:53:17
php将textarea数据提交到mysql出现很多空格的解决方法
2023-09-11 01:10:08
asp制作验证码的方法
2008-05-08 12:50:00
网站大改版=壮烈的死亡 ?
2009-04-03 14:09:00
![](https://img.aspxhome.com/file/UploadPic/20094/3/200903240046305586-33s.jpg)
Python实现简单2048小游戏
2023-08-13 00:19:18
![](https://img.aspxhome.com/file/2023/3/71553_0s.jpg)
什么是网站灵魂?
2007-09-08 08:25:00
Python装饰器代码详解
2021-04-28 23:16:03
JSP 获取spring容器中bean的两种方法总结
2023-06-15 07:27:46
Pytorch1.5.1版本安装的方法步骤
2021-02-07 00:57:09
![](https://img.aspxhome.com/file/2023/5/95235_0s.png)
python实现图像边缘检测
2022-03-17 15:35:11
![](https://img.aspxhome.com/file/2023/9/64339_0s.jpg)
使用python flask框架开发图片上传接口的案例详解
2021-12-26 05:54:30
![](https://img.aspxhome.com/file/2023/6/64736_0s.png)
Javascript优化(文件瘦身)
2008-06-02 13:20:00
Python编程生成随机用户名及密码的方法示例
2021-12-14 13:12:17
如何利用python正确地为图像添加高斯噪声
2023-08-03 08:26:22
![](https://img.aspxhome.com/file/2023/9/59459_0s.png)