Python - 制作超过100,000个请求并存储到数据库的最佳方法

时间:2017-09-24 18:54:45

标签: python multithreading sqlite asynchronous web-scraping

我从许多不同的请求中搜集数据。

到目前为止,我已经使用多线程和请求库来检索必要的,然后将它们加载到sqlite数据库中。大致采用以下方法:

p = Pool(processes=8)
for x in range(start_1,end_1):
    for y in range(start_2,end_2):
        entry_list = p.starmap(get_data, [(x , y , z) for z in range(start, end)]):
        ### get_data makes the request and retruns a tuple of (x,y,z,data)
        for entry in entry list:
            cur.execute('''INSERT INTO Database (attrib_1, attrib_2, attrib_3, data )
            VALUES ( ?, ?, ?, ?)''', entry )

这种方法非常慢(在我的机器上制作所有请求需要数天时间)。在做了一些研究之后,我发现对于这类问题存在多线程的替代方案,例如异步请求。不幸的是,我对这种方法一无所知,知道它是否合适,更不用说如何实现它。

有关如何有效完成此任务的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您的程序是I / O绑定的,请查看事件循环。由于全局解释器锁定(GIL),在Python中打破了真正的多线程。

查看asyncio(自Python 3.4起可用)和/或Twisted