我有一个网络爬行 python 脚本在终端中运行了几个小时,它不断地填充我的数据库。它有几个嵌套的 for 循环。由于某些原因,我需要重新启动计算机并从我离开的地方继续我的脚本。是否可以保留指针状态并在终端中恢复之前运行的脚本?
我正在寻找一种无需更改 python 脚本即可工作的解决方案。修改代码的优先级较低,因为这意味着重新启动程序并重新投入时间。
更新: 感谢 VM 的建议。我会接受的。为了完成,应该对脚本进行哪些通用修改以使其暂停和恢复?
更新 2: 在 VM 上移植工作正常。我还修改了脚本以使其在网络故障时失效。代码写在下面。
最佳答案
您可以尝试暂停计算机或在随后可以暂停的虚拟机中运行。但是,由于您的脚本正在处理网络连接,因此一旦您启动系统,您的脚本可能无法从您离开的那一点开始工作。暂停计算机并恢复它或保存虚拟 M/C 并恢复它意味着您需要重新建立网络连接。对于系统外部的任何元素都是如此,网络就是其中之一。如果您使用的是动态网络,则很有可能在您下次启动时获得一个新 IP,并且您之前使用的网络状态将无效。
如果您打算修改脚本,您需要牢记一些事情。
- 添加序列化和反序列化功能。 Python 有 pickle 和更快的 cPickle 方法来完成它。
- 添加重启点。执行此操作的最佳方法是定期保存状态,并在重新启动脚本时,在建立所有 transient 元素(如网络)后从上次保存的状态重新启动。
这不是一项容易的任务,因此请考虑投入大量时间 :-)
注意***
再想想。除了更改脚本之外,还有一种选择。您可以尝试使用 Amazon EC2 等云虚拟化解决方案。
关于python - 如何暂停在终端中运行的python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630573/