1

我正在开发一个网络爬虫,我正在使用多处理,一次下载和处理四个页面。但当然,我不打算多次抓取同一页面。

在我实现多处理之前,我使用 Sets 来维护一组抓取的 URL,我选择了 Sets,因为它们非常适合成员资格测试。我认为 multiprocessing.Manager 可以帮助我在四个进程之间实现共享集。但事实并非如此。

我想做的是

manager = Manager()
d = manager.set()

但是 Manager 类中不存在这样的功能。

有谁知道如何解决或解决我的问题?

4

2 回答 2

0

multiprocessing确实有一个实现dict(),它应该是set()成员资格测试的功能替代品。

只需使用键来存储您想要在哪些 url 上进行成员资格查找,并在值中存储您希望的任何内容:

d = manager.dict()

# Store some values
d['http://dr.dk'] = 1
d['http://stackoverflow.com'] = 1

# Do membership lookup
if 'http://stackoverflow.com' in d:
    print "We have visited Stack Overflow"

if 'http://google.com' not in d:
    print "We have not visited Google"
于 2012-10-08T11:05:04.597 回答
0

要么使用列表作为访问网站的基本存储。1) 锁定 2) 检查数组是否有值 3) 如果未访问,则添加 url 4) 解锁

或者创建另一个流程,您将在其中放置您的网址。任何需要检查网站是否被访问的进程只需通过队列或管道与那个进程对话。

于 2012-09-27T18:53:46.453 回答