0

これが他の場所で回答されている場合はお詫び申し上げます。私は周りを見回しましたが、決定的な答えは見つかりませんでした。

Tornado を使用して、クエリ文字列パラメーターを含む HTTP 要求を受け入れ、それらのパラメーターを使用して NOAA Web サービスを呼び出して気象データを取得し、NOAA 応答を処理/解析してから、最終データをユーザーに返します。

Web サービス要求の待ち時間や可用性を当てにすることができず、呼び出しを非ブロッキングにする必要があるため、Tornado を検討しています。(それ以外の場合は、Django を使用します)

また、必要に応じてあきらめられるように、NOAA 要求に適切なタイムアウトを設定できるようにしたいと考えています。

注: 私は Twisted を使用することにもオープンですが、学習曲線がはるかに急勾配であり、私のニーズは非常に単純に感じます。(私はこれを Node.js で行いますが、Python で解析要件を処理する方がはるかに快適です)

私を正しい方向に向けるのを手伝ってくれる人に、前もって感謝します。

終了したらサーバー プロセスをオープン ソース化し、適切なドキュメントへの例や RTFM リンクを提供してくれる人に感謝します。

4

1 に答える 1

0

プロジェクトからコード サンプルを抽出しました。完璧ではありませんが、Tornadp の AsyncHTTPClient の使用方法についてのアイデアが得られます

@tornado.gen.engine
def async_request(self, callback, server_url, method=u'GET', body=None, **kwargs):
    """
    Make async request to server
    :param callback: callback to pass results
    :param server_url: path to required API
    :param method: HTTP method to use, default - GET
    :param body: HTTP request body for POST request, default - None
    :return: None
    """
    args = {}

    if kwargs:
        args.update(kwargs)

    url = '%s?%s' % (server_url, urlencode(args))
    request = tornado.httpclient.HTTPRequest(url, method, body=body)

    http = tornado.httpclient.AsyncHTTPClient()
    response = yield tornado.gen.Task(http.fetch, request)

    if response.error:
        logging.warning("Error response %s fetching %s", response.error, response.request.url)
        callback(None)
        return
    data = tornado.escape.json_decode(response.body) if response else None
    callback(data)
于 2013-01-08T19:38:17.953 に答える