如何使用具有多进程处理的python检查网页是否处于活动状态
我有一个URL列表(大约25k),我正在尝试检查它们是否处于活动状态(200个响应)。希望使用Python的多处理库并行执行这些检查。我写了以下内容(主要基于Python文档示例),但它似乎运行得非常慢。有没有办法让这个脚本运行得更快如何使用具有多进程处理的python检查网页是否处于活动状态,python,http,Python,Http,我有一个URL列表(大约25k),我正在尝试检查它们是否处于活动状态(200个响应)。希望使用Python的多处理库并行执行这些检查。我写了以下内容(主要基于Python文档示例),但它似乎运行得非常慢。有没有办法让这个脚本运行得更快 import urllib2 import time import random from multiprocessing import Process, Queue, current_process, freeze_suppor
import urllib2
import time
import random
from multiprocessing import Process, Queue, current_process, freeze_support
class HeadRequest(urllib2.Request):
def get_method(self):
return "HEAD"
#
# Function run by worker processes
#
def worker(input, output):
for args in iter(input.get, 'STOP'):
result = alive(args)
output.put(result)
#
# Functions referenced by tasks
#
def alive(x):
x = x.strip()
try:
return x, ":", urllib2.urlopen(HeadRequest(x)).getcode()
except urllib2.HTTPError as e:
return x, ":", e.code
except:
return x, ": Error"
#
#
#
def check():
NUMBER_OF_PROCESSES = 500
text_file = open("url.txt", "r")
TASKS1 = text_file.readlines()
# Create queues
task_queue = Queue()
done_queue = Queue()
# Submit tasks
for task in TASKS1:
task_queue.put(task)
# Start worker processes
for i in range(NUMBER_OF_PROCESSES):
Process(target=worker, args=(task_queue, done_queue)).start()
# Get and print results
for i in range(len(TASKS1)):
print done_queue.get()
# Tell child processes to stop
for i in range(NUMBER_OF_PROCESSES):
task_queue.put('STOP')
if __name__ == '__main__':
freeze_support()
check()
感谢您的帮助有一个简单的方法:
Scrapy为Python提供了web爬虫框架:您可以为它提供一个要爬虫的URL列表(在您的情况下,它不需要遵循链接),并且它将在您为它提供的进程/线程限制内自动扩展到多个爬虫-您无需亲自查看多进程通信的详细信息和扩展
您自己的代码只剩下分析结果了。非常感谢,这似乎就是我要找的!有些相关,您对如何实现自己的并行处理脚本有什么建议吗?例如,我可以做一个简单的ping测试,而不是检查web服务器的状态吗?