我有一个简单的web crawler,每秒可以抓取~4个(特定)网站。如果我在两个不同的Python IDE中运行脚本,我可以加倍速度,因为两个程序运行代码每秒约4次爬行。 为什么我的代码运行速度比它可能慢?或者它更快,因为我使用一种愚蠢的方式通过同时使用两个不同的IDE来使我的脚本使用多线程/多处理?
我使用的是Python 3.5.2。
答案 0 :(得分:0)
对于工作线程池来说,这听起来像是一项伟大的任务。
答案 1 :(得分:0)
正如评论中所解释的那样,所有这些都与线程有关。
现在您的计划有一个解决方案:
import requests
import threading
class Crawler:
def __init__(self, url):
self.url = url
self.session = requests.Session()
def crawl(self):
page = self.session.get(url)
# Do your crawling here
with open('urls.txt', 'r') as f: # Assuming you use a file with a list of URLs
for url in f:
while(threading.active_count() > 20): # Use 20 threads
time.sleep(0.1)
c = Crawler(url)
t = threading.Thread(target = c.crawl())
请注意,threading.active_count()
也会计算主线程。
而且,您应该在HTTP请求中使用超时。