因此,基本上,我有一个无限的while循环,它每隔几分钟就会不断抓取一个网站。但是,为了启动此过程,我只是导航到/ scraper以启动新线程,尽管这完全正常,但如果Heroku重新启动其服务器,我并不想一直路由到/ scraper来启动线程。保养。有没有一种方法可以实现此目的,以便如果我路由到主页/我只能运行一个线程,因为我宁愿通过路由到主页而不是/ scraper来启动刮板。
struct HttpHeader {
String name;
String value;
};
t_httpUpdate_return updateheader(WiFiClient& client, const String& url,
const String& currentVersion = "",
const HttpHeader* headers, int headers_size)
{
HTTPClient http;
http.begin(client,url);
for (int i = 0; i < headers_size; i++) {
http.addHeader(F(headers[i].name), headers[i].value);
}
return handleUpdate(http, currentVersion, false);
}
// Calling it somewhere:
HttpHeader headers[] = { { String("Accept"), String("application/json") } };
updateheader(client, version, headers, 1);
答案 0 :(得分:0)
您正在寻找的可能是在Heroku中启动两个不同的过程。
Heroku有一个Procfile
,它决定什么才真正启动您的应用程序。一种可能是按原样启动您的Web服务器。 Source。
可以定义第二个过程,就像在procfile中添加新行一样简单。您可以使用该新行来启动Celery之类的功能,它可以完全满足您的需求。 Celery是一个分布式任务队列系统,您可以使用它来(例如)每n次安排任务。这也可以 消除您的while循环的需要,因为您只需每300秒安排一次即可。
web: flask run
worker: celery worker -A your_app/celery.py
显然还有Celery的其他替代方法,找到适合您需求的不错的任务队列框架。您甚至可以直接运行Webscraper,但是,这可能无法像Celery在崩溃时那样恢复自身。