我有一個web流程和一個api流程(類似于檔案和這些其他檔案中描述的“工人”流程)。但是,我不明白不同行程之間的網路是如何作業的。
兩個行程都在監聽0.0.0.0,并且作業行程系結到埠 5000。但是,當我嘗試從web行程發出請求時,我得到ConnectionRefusedError:
ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=5000): Max retries exceeded with url: /tokenize?sentence=hello (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd307019dc0>: Failed to establish a new connection: [Errno 111] Connection refused'))
我應該弄清楚另一個行程的IP嗎?我在這里做錯了嗎?
檔案:
api: python app.py
web: voila UI.ipynb --port $PORT --Voila.ip=0.0.0.0
應用程式.py:
from flask import Flask, request
from ie_utils import tokenize
app = Flask(__name__)
@app.route("/")
def home():
return {
"message": "Hello world!",
"version": "0.1",
}
if __name__ == "__main__":
import os
port = 5000
app.run(host="0.0.0.0", port=port)
相關代碼UI.ipynb:
import requests
requests.get("http://0.0.0.0:5000/")
完整源代碼:https ://github.com/astrojuanlu/ie-titanic-utils-a/tree/test-procfile
uj5u.com熱心網友回復:
我不明白不同行程之間的網路是如何作業的
除非您使用的是Private Spaces(Heroku 企業產品的一部分),否則它不會:
Common Runtime 通過將所有測功機彼此隔離開來提供強大的隔離。唯一可以到達測功機的流量是從路由器轉發到監聽
$PORT環境變數中指定埠號的 Web 行程的 Web 請求。Worker 和一次性 dyno 無法接收入站請求。
我不完全清楚您在這里嘗試做什么,但是您將無法通過向 localhost 發出 HTTP 請求來做到這一點。作為兩個獨立的應用程式運行它可能會更好——在這種情況下,您的 API 可能是它自己的web行程,而您的 Voilà 應用程式可以向 API 應用程式的主機名發出請求。
旁注:即使在允許這樣做的系統上,您的請求也不應該轉到0.0.0.0. 那不是真正的IP地址。
告訴 Flask 系結到0.0.0.0實際上意味著它應該監聽所有可用的 IP 地址。當您想要發出請求時,您應該使用您的系統正在使用的真實主機名或 IP 地址之一,例如,localhost或其127.0.0.1公共 IP 地址或主機名之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/435307.html
