Example #1
0
async def main():
    async with aiohttp.ClientSession(headers=VkApi.headers) as session:
        api = VkApi(VK_TOKEN, session)
        detector = Detector(PATH_TO_WEIGHTS)
        grabber = Grabber(
            api=api,
            detector=detector,
            profiles=PROFILES,
            save_dir=DEST_DIR,

            COUNTRY_CODES=COUNTRY_CODES,
            MIN_PHOTOS=MIN_PHOTOS,
            MAX_PHOTOS=MAX_PHOTOS,
            MIN_PHOTO_W=MIN_PHOTO_W,
            MIN_PHOTO_H=MIN_PHOTO_H,
            MIN_CROPS=MIN_CROPS,
            MAX_CROPS=MAX_CROPS,
            MIN_CROP_SIZE=MIN_CROP_SIZE,
        )
        try:
            # TODO: Automate workers start, so main gets start/end ids from argv
            # and all workers mill it together
            # TODO: User concurrent.futures.ProcessPoolExcecutor with loop.run_in_executror(...)
            mil = 10 ** 6
            tasks = [
                asyncio.create_task(grabber.user_fetcher(1, mil)),
                asyncio.create_task(grabber.user_fetcher(mil, 2 * mil)),
                asyncio.create_task(grabber.user_fetcher(2 * mil, 3 * mil)),
                asyncio.create_task(grabber.user_fetcher(3 * mil, 4 * mil)),
                asyncio.create_task(grabber.user_fetcher(4 * mil, 5 * mil)),
                asyncio.create_task(grabber.user_fetcher(5 * mil, 6 * mil)),
                asyncio.create_task(grabber.user_fetcher(6 * mil, 7 * mil)),
                asyncio.create_task(grabber.user_fetcher(7 * mil, 8 * mil)),
                asyncio.create_task(grabber.user_fetcher(8 * mil, 9 * mil)),
                asyncio.create_task(grabber.user_fetcher(9 * mil, 10 * mil)),
                asyncio.create_task(grabber.user_fetcher(10 * mil, 11 * mil)),

                asyncio.create_task(grabber.photo_fetcher()),
                asyncio.create_task(grabber.photo_fetcher()),
                asyncio.create_task(grabber.photo_fetcher()),

                asyncio.create_task(grabber.cropper())
            ]
            await asyncio.gather(*tasks)
        except KeyboardInterrupt:
            logger.info('Manual stop triggered')