2017-04-20 2 views
0

1つのIOLoopを使用して毎秒100のHTTP要求を行うアプリケーションがあります。要求は10秒後にタイムアウトします。現時点では、このリクエストの回答では何も処理していません。竜巻:複数のIOLoopsを作成する

私が気づいたことは、OSがkillするまで、プログラムのメモリフットプリントが徐々に1GBのRAMに増加し、PythonやTornadoがメモリを最適に管理していないと思うようになったことです。

IOLOOPを停止して閉じるとメモリが解放され、アプリケーションが動作し続けることを期待して、複数のIOLoopsを同時に実行しています。

いくつかの質問:

  1. は、このアプローチはプログラムメモリを解放役立つだろうか?
  2. メモリ容量が徐々に拡大するのはなぜですか?
  3. 複数の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() 

答えて

0

。タイムアウトが発生したときに要求を正しく閉じますか?ここをクリックしてください:Right way to “timeout” a Request in Tornadoあなたのコードの少なくとも一部を投稿すれば少し助けになります。

複数のIOLoopsを持つソリューションは、マルチスレッドのために同時に多くの要求を処理するのに役立ちます。しかし、私はそれが高いメモリ使用量を停止するとは思わない。

複数IOLoopsを使用する方法の適切な説明があります:Tornado multiple IOLoop in multithreads

+0

私は、このアプリケーションは、それはあなたがいくつかのコードを投稿できるクライアントアプリケーション – etayluz

+0

@etayluzあるサーバーではないことを言及するのを忘れてしまいましたか? –

+0

確かに、それが助けになるかわかりません – etayluz

関連する問題