我如何在列表中多点循环



我的任务可以通过使用python轻松完成,但是我的脚本完成时间太长了。因此,我想将其更改为多处理脚本。我不知道如何使用threading,但这似乎不适合这种情况。

我需要将所有页面的URL输入称为page_list的列表中,然后获取这些页面的内容,并使用BeautifulSoup获取某些类型的内容。这是我拥有的:

some_list_from_page_content_1=[]
some_list_from_page_content_2=[]
class sth():
        def get_rv_content(self,somevar_from_another_method):
                ...
                page_list=[page1,page2,page3,page4....]
                for i in range(len(page_list)):
                        Page_Content=session.get(page_list[i],headers=req_header).content
                some_list_from_page_content_1=[x for x in Page_Content if foo]+some_list_from_page_content_1
                some_list_from_page_content_2=[x for x in Page_Content if foo]+some_list_from_page_content_2

尝试使用dask并行化。

基本上,使用使用dask.delayeddask.compute可以实现并行的MAP功能。例如:

从dask进口延迟,计算从时间进口睡眠

def fun(x):
    sleep(x)
    return x
ls = range(10)
res = [delayed(sleep)(x) for x in ls]
print res

将在纳米秒中打印延迟列表:

[Delayed('fun-790acf2b-873d-4fd8-be07-2bc8111c4e01'), Delayed('fun-3c8c0c8e-699e-4029-ad12-8b5daefe13ad'), Delayed('fun-9da2e125-1910-4761-b1ad-23efa5f31096'), Delayed('fun-19a15dd5-5e4d-4103-8099-f3457b3cfc3a'), Delayed('fun-56d55b5e-8bb3-4ad9-8d7f-50a6509832b6'), Delayed('fun-d7efe939-7828-4d04-9c1c-60421983141f'), Delayed('fun-044ce640-7537-477e-bff8-9b0c92e62a7a'), Delayed('fun-5b833609-a268-4ef5-a8f1-acb4be4079d8'), Delayed('fun-f33e179e-7466-4763-ab08-ab735dccd8a8'), Delayed('fun-56b5eb76-85d4-4f03-8805-eeb891a14d0d')]

然后使用compute实际上执行该功能(瘫痪(:

print compute(res)

将打印结果(更快(:

([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],)

注意 - 要获取结果list查找compute(res)[0]


因此,就您的情况而

请注意,您可能需要在计算元素上运行:

print [compute(r) for r in res]    
[(0,), (1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,)]

相关内容

  • 没有找到相关文章

最新更新