python - 如何暂停在终端中运行的python脚本

标签 python terminal pausing-execution

我有一个网络爬行 python 脚本在终端中运行了几个小时,它不断地填充我的数据库。它有几个嵌套的 for 循环。由于某些原因,我需要重新启动计算机并从我离开的地方继续我的脚本。是否可以保留指针状态并在终端中恢复之前运行的脚本?

我正在寻找一种无需更改 python 脚本即可工作的解决方案。修改代码的优先级较低,因为这意味着重新启动程序并重新投入时间。

更新: 感谢 VM 的建议。我会接受的。为了完成,应该对脚本进行哪些通用修改以使其暂停和恢复?

更新 2: 在 VM 上移植工作正常。我还修改了脚本以使其在网络故障时失效。代码写在下面。

最佳答案

您可以尝试暂停计算机或在随后可以暂停的虚拟机中运行。但是,由于您的脚本正在处理网络连接,因此一旦您启动系统,您的脚本可能无法从您离开的那一点开始工作。暂停计算机并恢复它或保存虚拟 M/C 并恢复它意味着您需要重新建立网络连接。对于系统外部的任何元素都是如此,网络就是其中之一。如果您使用的是动态网络,则很有可能在您下次启动时获得一个新 IP,并且您之前使用的网络状态将无效。

如果您打算修改脚本,您需要牢记一些事情。

  1. 添加序列化和反序列化功能。 Python 有 pickle 和更快的 cPickle 方法来完成它。
  2. 添加重启点。执行此操作的最佳方法是定期保存状态,并在重新启动脚本时,在建立所有 transient 元素(如网络)后从上次保存的状态重新启动。

这不是一项容易的任务,因此请考虑投入大量时间 :-)

注意***

再想想。除了更改脚本之外,还有一种选择。您可以尝试使用 Amazon EC2 等云虚拟化解决方案。

关于python - 如何暂停在终端中运行的python脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630573/

相关文章:

python - 在 Python 版剧作家中,如何获取与 ElementHandle 相关的元素( child 、 parent 、祖 parent 、 sibling )?

python - 如何使用 pywinauto 在文本框中设置值?

node.js - 打破 Node repl中的无限循环?

unix - 如何设置 STDOUT 和 STDERR 的字体颜色

android - 如何使用按钮暂停 libGDX 中的 SpriteAnimation,以便在按下暂停按钮时能够查看当前帧?

python - Panda 的双括号索引 [[]]

linux - curl:(6)无法解析主机:google.com;名称或服务未知

server-sent-events - 如何 "pause"服务器发送事件?

java - 在 JFugue 中暂停音乐

python - 如何使用正则表达式在单词边界处拆分?