1つのIOLoopを使用して毎秒100のHTTP要求を行うアプリケーションがあります。要求は10秒後にタイムアウトします。現時点では、このリクエストの回答では何も処理していません。竜巻:複数のIOLoopsを作成する
私が気づいたことは、OSがkillするまで、プログラムのメモリフットプリントが徐々に1GBのRAMに増加し、PythonやTornadoがメモリを最適に管理していないと思うようになったことです。
IOLOOPを停止して閉じるとメモリが解放され、アプリケーションが動作し続けることを期待して、複数のIOLoopsを同時に実行しています。
いくつかの質問:
- は、このアプローチはプログラムメモリを解放役立つだろうか?
- メモリ容量が徐々に拡大するのはなぜですか?
- 複数のIOLoopsを起動してシャットダウンするにはどうすればよいですか?
私はメモリを管理するためにプロセスとスレッドを使用しようとしましたが、これまでのところうまくいきませんでした。
それはここに役立ちます私の現在のコードの場合:私はこの問題は、サーバーが処理する要求にあると思い
import datetime
from tornado.httpclient import AsyncHTTPClient
import tornado.ioloop
PROXIES = []
def load_proxies():
"""Read proxies from file and store them in PROXIES"""
...
def test_proxies():
"""Test proxies"""
global PROXIES
print '\nProxy Count: ' + str(len(PROXIES)) + '\n'
for proxy in PROXIES:
request = tornado.httpclient.HTTPRequest("http://target.com", request_timeout=5)
request.proxy_host = proxy['host']
request.proxy_port = proxy['port']
HTTP_CLIENT.fetch(request, handle_response)
tornado.ioloop.IOLoop.current().add_timeout(datetime.timedelta(seconds=1), test_proxies)
def handle_response(response):
"""Handles response"""
try:
proxy = {d['host']:d for d in PROXIES}[response.request.proxy_host]
except KeyError:
return
if response.code != 200:
PROXIES.remove(proxy)
print response.code
AsyncHTTPClient.configure("tornado.curl_httpclient.CurlAsyncHTTPClient", max_clients=10000)
HTTP_CLIENT = AsyncHTTPClient()
load_proxies()
test_proxies()
tornado.ioloop.IOLoop.current().start()
私は、このアプリケーションは、それはあなたがいくつかのコードを投稿できるクライアントアプリケーション – etayluz
@etayluzあるサーバーではないことを言及するのを忘れてしまいましたか? –
確かに、それが助けになるかわかりません – etayluz