【发布时间】:2016-11-06 21:50:11
【问题描述】:
我编写了一个 Python 脚本,该脚本执行优化并运行数天以获得解决方案(由于目标函数成本高昂)。在所有的工作中,只要在某个时候停止计算就足够了,因为解决方案对我来说已经足够好了(但对于优化算法来说却不是)。
问题是,我总是可以中止按 Ctrl+C。但是没有机会很好地输出当前的最佳参数,绘制数据,保存它等等。在下一次计算目标函数之后以受控方式停止脚本会很棒。所以我的想法是质疑一些变量(如果 user_stop=True)并以编程方式停止优化。但是如何设置这样的变量呢? python控制台在执行过程中被阻塞。
我考虑过设置文本文件的内容并在每次迭代中读取它,但对于脚本的其他用户来说,这不仅糟糕而且难以解释。从理论上讲,我也可以要求用户输入,但脚本不会自动运行(它应该直到有人决定停止)。
对我的问题有什么想法吗?
基本上就是这样 - 在某个点停止循环但执行打印:
a = 0
while True:
a = a + 1
print(a)
【问题讨论】:
-
在正在运行的进程中插入或更改变量是非常不安全的,而且非常困难。调试器会这样做,这就是您必须采取的方法(在旧版本的 Windows 中,可以进行 DLL 接种,但在最近的版本中这是有问题的)。您在哪个操作系统上运行?
-
查看
signals模块。您可以从进程外部发送一个信号,您的进程可以捕获它,并且可以在调用sys.exit(..)之前将所有参数写入您的文件。 -
我在 Windows 7 上运行。我查看了信号模块,根据这里的很多线程,它似乎比 Windows 上的解决方案更麻烦。我担心这不会是我的首选解决方案。但是,如果没有其他人出现,我会尝试一下。
标签: python