在多处理环境中进行成员资格测试的数据类型

时间:2012-09-27 18:10:53

标签: python shared-objects python-multithreading

我正在使用网络抓取工具,我正在使用多处理,一次下载和处理四个页面。但是因为我不打算不止一次抓取同一页面。

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

我想做的是像

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

但是Manager类中不存在这样的函数。

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

2 个答案:

答案 0 :(得分:0)

使用list作为访问过的网站的基本商店。 1)锁定 2)检查数组是否有值 3)如果没有访问则添加URL 4)解锁

或创建另一个流程,您可以在其中设置正常的设置,以便放置您的网址。 需要检查网站是否被访问的任何进程只通过队列或管道与该进程通信。

答案 1 :(得分:0)

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

只需使用密钥存储您想要进行会员资格查询的网址,并在价值中存储您想要的任何内容:

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"