использование многопроцессорной обработки при запуске скрипта - PullRequest
0 голосов
/ 17 апреля 2019

Я запускаю скрипт, который берет 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() 

Любые предложения будут действительно полезны. Заранее спасибо.

1 Ответ

1 голос
/ 17 апреля 2019

Как предлагается в комментарии, есть пример с использованием aiohttp и 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...