【发布时间】:2022-07-14 05:23:41
【问题描述】:
我有一个带有 python 的 Fastapi,它可以进行某种网络抓取。 api 正确地执行了抓取部分,我通过测试确定这一点,但是当我访问 api 页面时它显示此错误:
2022-07-08T09:15:12.564152+00:00 app[worker.1]: INFO: Started server process [4]
2022-07-08T09:15:12.564200+00:00 app[worker.1]: INFO: Waiting for application startup.
2022-07-08T09:15:12.564650+00:00 app[worker.1]: INFO: Application startup complete.
2022-07-08T09:15:12.565232+00:00 app[worker.1]: INFO: Uvicorn running on http://0.0.0.0:47436 (Press CTRL+C to quit)
2022-07-08T09:16:05.643153+00:00 heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=cryptic-plateau-86689.herokuapp.com request_id=504c098c-a538-418b-898c-70ed38496780 fwd="156.146.59.25" dyno= connect= service= status=503 bytes= protocol=https
这是我的脚本的一个小sn-p
dict = Scraping().get_books() # this is the web scraping part
app = FastAPI()
@ app.get("/")
def home():
"""Gets everything"""
return dict
这是我的 Procfile:
worker: uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}
请注意,我尝试使用 web 而不是 worker,但随后又遇到了另一个错误
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
请注意,Scraping().get_books() 需要很长时间(2-5 分钟),这就是为什么我认为在使用 web 时会导致超时。
请记住,我是一个初学者,我的想法是这样的:我认为worker 可以做网络抓取部分,但不能处理 api 部分。另一方面,web 可以处理 api 部分,但不能进行网页抓取。这个理论正确吗?如果是,我怎样才能同时使用 web 和 worker 来完成不同的任务?
【问题讨论】:
-
这可能不是您的问题的直接原因,但请注意使用
dict名称作为变量,因为这会用您新分配的值覆盖 python 中的dict关键字,这可能会导致不可预见的问题,尝试将其重命名为其他名称并从那里开始
标签: python web-scraping heroku