我正在运行一个脚本,它接受一个 url 并在本地下载文件,然后将文件名作为参数传递给函数。问题是这样做需要很多时间。所以我尝试使用线程池,但这并没有给出任何改进。我做错了吗,这是它的样子。
pool = ThreadPool(processes=8)
ocr_result = pool.apply_async(download_file, (url,))
file_name = ocr_result.get()
async_result = pool.apply_async(return_label, (file_name,))
prediction, prediction_list = async_result.get()
任何建议都会非常有帮助。提前致谢。
正如评论中所建议的,有一个使用aiohttp
and的示例asyncio
:
def main():
# limit concurrency
loop = asyncio.get_event_loop()
connector = aiohttp.TCPConnector(limit=100)
# login if required
async with aiohttp.ClientSession(loop=loop, connector=connector) as sess:
async with sess.post(
LOGIN_URL, data=payload) as resp:
# ensure login success
assert resp.status == 200
for url in download_links:
await download(url, sess)
您的下载功能如下所示:
async def download(url, sess):
async with sess.get(url) as resp:
if resp.status == 200:
# post process
最后使用主循环:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句