我有一个第三方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:如果是,这里有什么优化吗?你知道吗
谨致问候
目前没有回答
相关问题 更多 >
编程相关推荐