如何从simpy.Environment中获取所有活跃进程(含嵌套进程)?
问题解答
能不能从Simpy环境中获取所有活跃进程?
Simpy的Environment本身没有提供官方公开的API来获取活跃进程列表,但可以通过其内部维护的_processes属性直接获取——这是一个集合,包含了当前所有处于活跃状态的进程(不管是父进程还是嵌套的子进程)。
批量中断所有活跃进程的方法
不需要让每个进程手动监听中断再递归中断子进程,直接遍历env._processes集合,逐个调用进程的interrupt()方法即可:
import simpy def child_process(env): try: yield env.timeout(10) except simpy.Interrupt: print(f"子进程在时间{env.now}被中断") def parent_process(env): env.process(child_process(env)) try: yield env.timeout(20) except simpy.Interrupt: print(f"父进程在时间{env.now}被中断") # 初始化环境并启动父进程 env = simpy.Environment() env.process(parent_process(env)) # 运行到时间5时触发批量中断 env.run(until=5) # 遍历所有活跃进程并中断 for process in list(env._processes): process.interrupt() # 继续运行查看中断效果 env.run()
注意事项
_processes是Simpy的内部属性(以下划线开头),官方不保证其在未来版本中的兼容性,但在当前主流版本(如Simpy 4.x)中稳定可用。- 进程结束后会自动从
_processes中移除,所以不需要手动维护列表的清理工作。
内容的提问来源于stack exchange,提问作者gameveloster
相关产品推荐
相关产品推荐

