我在Windows机器上使用python2.7。我有一个带有数据和头的url数组,所以POST方法是必需的。 在简单的执行过程中,它可以很好地工作:
rescodeinvalid =[]
success = []
for i in range(0,len(HostArray)):
data = urllib.urlencode(post_data)
req = urllib2.Request(HostArray[i], data)
response = urllib2.urlopen(req)
rescode=response.getcode()
if responsecode == 400:
rescodeinvalid.append(HostArray[i])
if responsecode == 200:
success.append(HostArray[i])
我的问题是,如果HostArray的长度非常大,那么在循环中需要花费很多时间。 那么,如何在一个多线程中检查HostArray的每个url。如果每个url的响应码是200,那么我在做不同的操作。我有数组来存储200和400个响应。 那么,如何在python中的多线程中实现这一点呢
您的案例(基本上是将一个列表处理成另一个列表)看起来像是} 。当然,使用
concurrent.futures
的理想候选者(参见示例this answer),或者您可以一直到^{ThreadPoolExecutor
将并发运行的线程数限制在合理的范围内。在如果你想在一个单独的线程中完成每一个任务,你可以做如下操作:
我还建议使用请求:http://docs.python-requests.org/en/latest/
以及线程池: Threading pool similar to the multiprocessing Pool?
线程池使用率:
^{pr2}$scrapy使用twisted library并行调用多个url,而无需为每个请求打开一个新线程的开销,它还可以管理内部队列以累积甚至优先化它们作为奖励您还可以通过设置限制并行请求的数量maximum concurrent requests,您可以启动一个废弃的spider作为外部进程,也可以从代码中启动,只需设置spider
start_urls = HostArray
相关问题 更多 >
编程相关推荐