正如您在评论中所说,您运行在一个公共共享服务器上,比如GoDaddy等等。因此cron不可用那里并且通常禁止长时间运行的脚本-即使您使用sleep,您的进程也会被终止。在
因此,我看到的唯一解决方案是使用一个外部服务器,您必须控制它连接到您的公共服务器并每10分钟运行一次脚本。一种解决方案可以是使用本地计算机上的cron将wget或{}连接到主机上的特定页面。**在
也许你可以找到允许定期运行脚本的在线服务,并使用这些服务,但我不知道。在
**奖励:您可以直接获得结果作为回应,而不必给自己发送电子邮件。在
更新
因此,在更新后的问题中,您建议您使用脚本通过HTTP请求调用自己。我以前也想过,但我在之前的回答中没有考虑过,因为我相信它(一般来说)不会起作用。在
我关心的是:如果请求脚本的HTTP连接在脚本终止之前关闭,服务器是否会终止该脚本?在
换句话说:如果您打开yoursite.com/script.py,运行需要60秒,并且在10秒后关闭与服务器的连接,脚本是否会一直运行到正常结束?在
我认为答案显然是“不,脚本将被杀死”,因此该方法将是无用的,因为您应该保证通过HTTP请求调用自己的脚本比被调用的脚本活得更长。我用烧瓶做了个小实验,结果证明我错了:from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
import time
print('Script started...')
time.sleep(5)
print('5 seconds passed...')
time.sleep(5)
print('Script finished')
return 'Script finished'
if __name__ == '__main__':
app.run()
如果我运行这个脚本并对localhost:5000发出一个HTTP请求,并在2秒钟后关闭连接,那么脚本将继续运行,直到结束,消息仍然被打印出来。在
因此,对于flask,如果您可以对自己执行异步请求,那么您应该能够拥有一个“无限循环”脚本。在
不过,我不知道其他服务器上的行为。你应该做个测试。在
控制
假设您的服务器允许您执行GET请求并让脚本在连接关闭的情况下运行,那么您就没有什么事情需要处理了,例如,您的脚本仍然必须运行得足够快,以便在允许的最大服务器时间内完成,并且使脚本每10分钟运行一次,最多允许1分钟,每次打10个电话你都要数数。在
此外,必须控制这种机制,因为您不能按照您的请求中断它以进行调试。至少,不是直接的。在
因此,我建议您使用文件:使用一个文件将爬行分成更小的步骤,每个步骤都可以在不到一分钟内完成,然后在再次调用脚本时再次继续。在
在实际执行爬网之前,使用一个文件来计算脚本被调用的次数。例如,如果允许脚本生存90秒,但您希望每隔10小时爬网一次,则这是必需的。在
使用一个文件来控制脚本:存储一个布尔标志,如果需要,可以使用它来停止递归机制。在