我有一个应用程序每秒使用一个IOLoop创建100个HTTP请求。请求在10秒后超时。我目前没有对请求的回应进行任何处理。龙卷风:创建多个IOLoops
我注意到的是,程序的内存占用量逐渐增加到1GB内存,直到操作系统终止它为止,这让我认为Python或Tornado没有优化管理内存。
接下来我想尝试的是有多个IOLoops(十个同时运行) - 希望当我停下来关闭一个IOLOOP时,它将有希望释放一些内存,并且我的应用程序可以继续运行。
几个问题:
- 请问这种方法有助于释放程序存储器?
- 为什么内存 占地面积逐渐增大?
- 如何启动多个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