在运行脚本时使用多处理

问题描述 投票:0回答:1

我正在运行一个脚本,它接收一个url并在本地下载文件,然后将文件名作为参数传递给一个函数。问题是这需要花费很多时间。所以我尝试使用Threadpool,但是这不给任何改进。我做错了,这就是它的样子。

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() 

任何建议都会非常有用。提前致谢。

python multithreading python-multiprocessing pool
1个回答
1
投票

正如评论中所建议的,有一个使用aiohttpasyncio的示例:

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())
© www.soinside.com 2019 - 2024. All rights reserved.