问题描述
问题
请帮助理解为什么下面的 SimPy 代码没有按预期工作。
背景
我想实现一个简单的模拟,其中学生每隔 15 次周期向老师报告最多 3 次。教师进程使用 Procedure ExecuteBid
input: user,bid,seller
Description: Run a sql transaction to update all related entities
START TRANSACTION;
UPDATE user SET budget=budget-bidamount WHERE id= user.id;
UPDATE seller SET balance=balance+bidamount WHERE ID = seller.id;
UPDATE auction SET winner=bid.id,closed_at=Now() WHERE id = bid.auction_id;
UPDATE bid SET processed_at = Now(),status='WON' WHERE id = bid.id;
COMMIT;
if commit fails then do a rollback
ROLLBACK;
阻止学生进程。
我原以为老师每 15 个滴答就会收到报告,但结果没有发生。
yield student
我以为老师会在 time=15 被解锁,但直到 time=45。
import simpy
env = simpy.Environment()
def student(env):
for i in range(3):
yield env.timeout(15)
print('student reporting at %d' % (env.Now))
def teacher(env,student):
while True:
yield env.timeout(5)
print('teacher waits for student to report at %d' % (env.Now))
yield student
print("teacher got student report at %d" % (env.Now))
s = env.process(student(env))
t = env.process(teacher(env,s))
env.run(until=60)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)