3

次の目的で gevent + bottle を使用しています。

  1. リモート サーバーで API メソッドを呼び出す
  2. API からの処理結果
  3. HTML を返す

API 呼び出し (httplib/socket) のタイムアウトを設定しましたが、(たとえば) 5 秒に設定されている場合、Python スクリプトはその間ビジーであり、他のページを返すことができません (これは正常です)。

質問: このような長いリクエストを処理するために、どうにかして (別のスクリプトで) gevent を巧みに使用することはできますか?

localhost:8080 で別の API 問い合わせスクリプトを開始し、それをロード バランサーの背後に配置することを考えていましたが (「インターネット」が示唆するように)、もっと良い方法があるはずです。

私は経験豊富なプログラマーではないので、助けていただきありがとうございます!

4

1 に答える 1

11

実際、あなたの問題は存在しないはずです。gevent サーバー バックエンドは、同時に任意の数の要求を処理できます。1 つが 5 秒間ブロックされても、サーバーに到着する他の要求には影響しません。それが gevent サーバー バックエンドの要点です。

1) gevent サーバー バックエンドを正しく使用していますか? wsgiref デフォルト サーバー (シングル スレッド) のモンキー パッチ バージョンだけではありませんか?

2) 経由でサーバーを起動しましたbottle.py --server geventか? そうでない場合は、gevent.monkey.patch_all()他のすべてのソケット関連のもの (ボトルを含む) をインポートする前にしましたか?

例:

from gevent import monkey
monkey.patch_all()
import bottle
import urllib2

@bottle.route(...)
def callback():
   urllib2.open(...)

bottle.run(server='gevent')
于 2013-01-28T13:50:56.860 に答える