使用python多线程,两个人AB通过一个账户A在柜台取钱和B在ATM机取钱
时间: 2023-12-10 08:41:44 浏览: 101
可以使用Python中的_thread模块来实现多线程,下面是一个示例程序:
```python
import _thread
import time
balance = 1000 # 初始账户余额
def withdraw(name, amount, mode):
global balance
if mode == 'counter': # 在柜台取钱
print('{}正在柜台取钱{}元...'.format(name, amount))
time.sleep(2) # 模拟取款过程
elif mode == 'atm': # 在ATM机取钱
print('{}正在ATM机取钱{}元...'.format(name, amount))
time.sleep(3) # 模拟取款过程
if balance >= amount:
balance -= amount
print('{}取款{}元成功,账户余额为{}元'.format(name, amount, balance))
else:
print('{}取款失败,余额不足'.format(name))
# A在柜台取款,B在ATM机取款
try:
_thread.start_new_thread(withdraw, ('A', 500, 'counter'))
_thread.start_new_thread(withdraw, ('B', 800, 'atm'))
except:
print('Error: unable to start thread')
while True:
pass
```
程序中定义了一个全局变量`balance`表示账户余额,然后定义了一个`withdraw`函数用于取款,其中`name`表示取款人姓名,`amount`表示取款金额,`mode`表示取款方式(柜台或ATM机)。在取款过程中,使用`time.sleep`模拟取款的时间。如果余额充足,则更新余额并输出取款成功的信息,否则输出取款失败的信息。
在主程序中,使用`_thread.start_new_thread`函数创建两个线程分别表示A在柜台取款和B在ATM机取款,并通过`while True`保持程序运行。当然,也可以使用`threading`模块来实现多线程,具体方法类似。
注意,这个程序中没有考虑并发访问账户余额的情况,如果多个线程同时对余额进行操作,可能会出现错误。为了避免这种情况,可以使用锁机制来保护共享资源。
阅读全文