多进程下载受限于

2024-05-13 02:39:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

假设结果处理需要一些时间,当一个进程正在处理时,另一个进程可以下载东西,尽管这一切都受到1下载/s最大值的限制

代码如下所示:

你知道吗主.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:如果是,这里有什么优化吗?你知道吗

谨致问候


Tags: 模块文件数据代码py列表datetime进程