SimPy - 如何正确实现进程间同步?

问题描述

问题

请帮助理解为什么下面的 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 (将#修改为@)