【问题标题】:Heroku: how to programatically restart or shut down a dyno from an application running on that dynoHeroku:如何通过在该测功机上运行的应用程序以编程方式重新启动或关闭测功机
【发布时间】:2016-04-23 20:28:49
【问题描述】:

我有一个在 Heroku 上运行的爬虫刮板。我想在刮板完成后立即重新启动它。实现这一目标的最佳方法是什么?

  • 显而易见的解决方案是杀死或重新启动该测功机,然后 Heroku 将通过 procfile 重新运行刮板。但是,目前尚不清楚执行此操作的最佳方法是什么。

相关:Heroku 是否会自动检测到您的进程已停止运行并自动为您关闭测功机?还是测功机只是坐在那里无所事事?

相关#2:你能否在爬虫退出之前从你的爬虫中调用一个 python 脚本/程序,然后该脚本可以等待 5 秒然后执行

scrapy runspider myspider

这行得通吗?大概是试图执行

scrapy runspider myspider

蜘蛛本身会导致宇宙内爆或其他什么(可能是扭曲的错误)?

【问题讨论】:

  • 回答我自己的问题:>“想在爬虫完成后立即重新启动。实现此目的的最佳方法是什么?” ----- 最好的方法是创建一个带有while循环的“主”脚本,它使用subprocess.call 重复调用scrapy的实例。 Heroku procfile 运行主脚本。但是,最初的问题仍未得到解答:如何在 heroku 中从自身内部杀死 dyno?

标签: heroku


【解决方案1】:

以下代码使用subprocess 重复运行蜘蛛,并在完成后重新运行它。假设这段代码在一个名为myScript.py的文件中

import subprocess

while True:

   subprocess.call(["scrapy", "runspider", "myspider.py"])

procfile 应该引用该脚本而不是实际的爬虫,如下所示:

myHerokuScrapingProcess: python myScript.py

我仍然不知道如何重新启动实际的测功机。

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 2014-12-27
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2013-04-04
    • 2016-10-24
    相关资源
    最近更新 更多