【发布时间】:2014-08-17 14:37:33
【问题描述】:
您好,我使用 requests-futures 库编写了一个多线程请求和响应处理程序。
但是,它似乎很慢,而且不像我想象的那样异步。输出缓慢且有序,如果线程正确,则不会像我预期的那样交错。
我的问题是为什么我的代码很慢,我该怎么做才能加快速度?举个例子就好了。
代码如下:
#!/usr/bin/python
import requests
import time
from concurrent.futures import ThreadPoolExecutor
from requests_futures.sessions import FuturesSession
session = FuturesSession(executor=ThreadPoolExecutor(max_workers=12))
def responseCallback( sess, resp ):
response = resp.text
if not "things are invalid" in response in response:
resp.data = "SUCCESS %s" % resp.headers['content-length']
else:
resp.data = "FAIL %s" % resp.headers['content-length']
proxies = {
"http":"http://localhost:8080",
"https":"https://localhost:8080"
}
url = 'https://www.examplehere.com/blah/etc/'
headers= {
'Host':'www.examplehere.com',
'Connection':'close',
'Cache-Control':'max-age=0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Origin':'https://www.examplehere.com',
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/533.32 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.123 Chrome/34.0.1847.123 Safari/337.12',
'Content-Type':'application/x-www-form-urlencoded',
'Referer':'https://www.exampleblah.etc/',
'Accept-Encoding':'gzip,deflate,sdch',
'Accept-Language':'en-US,en;q=0.8,de;q=0.6',
'Cookie':'blah=123; etc=456;',
}
for n in range( 0, 9999 ):
#wibble = n.zfill( 4 )
wibble = "%04d" % n
payload = {
'name':'test',
'genNum':wibble,
'Button1':'Push+Now'
}
#print payload
#r = requests.post( url, data=payload, headers=headers, proxies=proxies, verify=False )
future = session.post( url, data=payload, headers=headers, verify=False, background_callback=responseCallback )
response = future.result()
print( "%s : %s" % ( wibble, response.data ) )
理想情况下,我想修复我的实际代码,仍然使用我已经使用过的库,但如果由于某种原因它不好,我愿意接受建议......
编辑:我目前正在使用 python2 和 concurrent.futures 反向端口。
编辑:慢 - 大约每秒一个请求,并且不是并发的,而是一个接一个,所以 request1、response1、request2、response2 - 我希望它们在请求出去和进入多个线程时交错?
【问题讨论】:
-
您能更详细地描述一下
slow的含义吗?
标签: python multithreading asynchronous python-requests