多处理|找一个现有的口译员

时间:2011-07-22 14:35:51

标签: python segmentation-fault multiprocessing evolutionary-algorithm

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

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

我正在使用多处理模块来评估候选人的适应性。 如何在几秒钟内捕获一个segfaulting翻译或杀死它?

非常感谢,

-jf

1 个答案:

答案 0 :(得分:3)

使用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()

这样的事情可能有用。如果碰巧在超时间隔正好退出,它就有竞争条件;杀人可能会失败。