多流程下载受限制

时间:2014-11-25 20:53:23

标签: python locking multiprocessing

我有一个第三方python3模块,可以从互联网上的源下载数据。 我无法控制这个模块是如何做到的(很可能只是一个http donwload) 我只传递一些密钥,模块将相关数据返回给我。 每秒最多下载1次

我有10000个数据通过这个模块获得10000个密钥。 因此,我构建了10000个键的列表,然后将列表映射到多进程池(比如4个进程)并收集结果。 每个进程都会下载,处理数据,存储到磁盘上的文件,然后返回状态。 每个进程都会为它处理的2500个请求中的每一个执行此操作。

假设结果处理需要一些时间,当进程处理时,另一个可以下载内容,尽管所有内容都受到1download / s max的限制。

代码如下:

main.py

#collect the list l of 10000 keys
...
pool = Pool(initializer=initPoolProcess, initargs=... )
...
m = Manager()
lck = m.Lock()
lastQueryTime = m.Value('d',0.0)

result = pool.map( f, l )
pool.close()
pool.join()

另一个文件mp.py有:

def f(...):
     while (datetime.datetime.now().timestamp() - lastQueryTime.value) < 1.0:
         time.sleep( datetime.datetime.now().timestamp() - lastQueryTime.value )
     lck.acquire()
     lastQueryTime.value = datetime.datetime.now().timestamp()
     lck.release()
     # do actual download
     # process
     # return result

问题1:鉴于这段代码,我如何测试我的假设,我通过并行化任务获得了什么?

问题2:如果是,那么这里有优化吗?

的问候,

0 个答案:

没有答案