使用多处理(Google API)加速python URL请求

使用多处理(Google API)加速python URL请求,python,multithreading,python-requests,google-distancematrix-api,Python,Multithreading,Python Requests,Google Distancematrix Api,我正在使用谷歌的距离矩阵API,希望在10秒内达到1000个请求的速率限制,而不必使用矩阵组件,但只需要更高的限制能力(方向API每秒10次->实际上每秒100次) 编辑: 我的主要目标是能够准确地控制每秒填写的请求数(例如,10秒内填写800个请求,或10秒内填写1000个请求),理想情况下,我会使用这种伪代码,但我不确定: pool = Pool() # Initialize a pool of max processes start_time = time.time() counter

我正在使用谷歌的距离矩阵API,希望在10秒内达到1000个请求的速率限制,而不必使用矩阵组件,但只需要更高的限制能力(方向API每秒10次->实际上每秒100次)

编辑:

我的主要目标是能够准确地控制每秒填写的请求数(例如,10秒内填写800个请求,或10秒内填写1000个请求),理想情况下,我会使用这种伪代码,但我不确定:

pool = Pool()  # Initialize a pool of max processes
start_time = time.time()
counter = 0
for one_url in URL_LIST:
    counter += 1
    # Once sent 1000 requests
    if counter = 1000:
        # If elapsed less than 10 seconds
        if time.time() - start_time < 10 seconds:
            # Wait until we hit 10 seconds
            time.sleep(time.time() - start_time)  
        else:
            #Taking more than 10 seconds
            pass
        #Reset counter and timer
        start_time = time.time()  
        counter = 0   
    RESULTS_OUT = pool.map(GeocodeHandler, one_url) 
pool.close()  # This means that no more tasks will be added to the pool
pool.join()  # This blocks the program till function is run on all the items
pool=pool()#初始化max进程池
开始时间=time.time()
计数器=0
对于url\u列表中的一个\u url:
计数器+=1
#曾经发送了1000个请求
如果计数器=1000:
#如果超过10秒
如果time.time()-开始时间<10秒:
#等我们到达10秒
time.sleep(time.time()-开始时间)
其他:
#超过10秒
通过
#重置计数器和计时器
开始时间=time.time()
计数器=0
RESULTS\u OUT=pool.map(GeocodeHandler,一个url)
pool.close()#这意味着不再向池中添加任务
pool.join()#这会阻止程序,直到函数在所有项上运行为止

为什么不搜索没有API限制的提供商?@Karussell我想这是明智的长期方法;但是现在我觉得从10个请求到100个仍然是好的。老实说,我对学习如何完成比完成更感兴趣这是否更适合代码审查?正如你所说的那样,这是有效的。@Noelkd感谢你的回答,但是我已经更新了问题,把重点放在更紧迫的问题上,那就是每Y秒准确地命中X个请求。为什么不搜索没有API限制的提供商呢?@Karussell我想这是明智的长期方法;但是现在我觉得从10个请求到100个仍然是好的。老实说,我对学习如何完成比完成更感兴趣这是否更适合代码审查?正如你所说的,这是有效的。@Noelkd谢谢你的回答,不过我已经更新了问题,把重点放在更紧迫的事情上,那就是每Y秒准确地命中X个请求