如何在 SimPy 3 中实现工作窃取?

How to implement work stealing in SimPy 3?

我想在多处理器系统中实现类似于工作窃取或任务迁移的东西。详情如下。

我正在模拟一个调度系统,它有多个工作节点(资源,每个节点都有多个容量),以及随机到达并由调度程序在特定工作节点排队的任务(进程)。这工作正常。

但是,我想在工作节点有空闲容量时触发一个事件,以便它从等待队列最长的工作节点那里抢走前端任务。

我可以实现上述功能。问题是在我们窃取工作的工作队列上等待的所有任务都会收到事件通知。我只想通知队列前面的任务(或者只通知队列前面的 N 个任务)。

银行反悔的例子是最接近我想要实现的例子。但是,它 (1) 所有客户在收到事件被触发通知时离开队列,以及 (2) 当事件被触发时,客户离开系统;在我的示例中,我想让任务在另一个工作人员处等待(尽管它不会等待,因为该工作人员的队列是空的)。

老问题:这可以在 SimPy 中完成吗?

新问题:如何在 SimPy 中执行此操作? 1)我怎么能有很多进程,等待一个资源,监听一个事件,但只通知第一个? 2) 如何让进程迁移到另一个资源?

是的,这可以用 SimPy 来完成。