多处理|捕获正在退出的interp

2024-04-23 14:14:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个进化计算问题,我正在用优秀的ECSPY模块来实现这个问题。 我使用的适应值来自一个相当复杂的动力学模拟。 问题是我不喜欢让我的模拟防弹的方法;这是相当无用的,因为进化过程可能会出现一些情况,而simu引擎就是无法解决的。但是,约束生成器返回可解的场景是过度约束。在

所以我的方法很简单;如果模拟时间太长,或者崩溃,那么I'll just let Darwin's mercy handle it。在

我正在使用多处理模块来评估候选对象的适合度。 我如何在给定的秒数内捕获或杀死一个分段解释器?在

非常感谢

-jf公司


Tags: 模块方法引擎过程时间场景情况动力学
1条回答
网友
1楼 · 发布于 2024-04-23 14:14:00

使用subprocess将Python解释器“包装”到Python脚本中。在

  • 启动一个运行您的东西的Python解释器。

  • 开始计时。

  • 等待时钟用完或子进程崩溃。

要做到这一点,最简单、最懒惰的方法是定期轮询子进程,看看它是否已经死了。是的,这是“繁忙的等待”,但如果您不希望在子进程完成时收到即时通知,则实现起来很简单,并且资源成本相对较低。在

import subprocess
import time
timeout = # your timeout interval
real_work= subprocess.Popen( "python the_real_work.py" )
start= time.time()
status= real_work.poll()
while time.time()-start < timeout and not status:
    time.sleep( 10.0 )
    status= real_work.poll()
if not status: 
    real_work.kill()

这样的事情也许会有结果。如果它恰好在超时时间间隔退出,那么它就有一个争用条件;kill可能会失败。在

相关问题 更多 >