• Как в python использовать функции async внутри multiprocessing.Pool?

    @Phoenix2000h Автор вопроса
    Сергей Горностаев, Есть рабочий код, в котором асинхронно делаются запросы к списку сайтов (из файла в нём указаны каждый на новой строке без пробелов):
    import asyncio
    import time
    import cached
    import httpx
    from cachetools import cached, TTLCache
    
    FILE_NAME = "/home/user/IdeaProjects/python_async_pytest/dir_async/urls.txt"
    
    
    @cached(cache=TTLCache(maxsize=100, ttl=60))
    async def fetch_url(url, queue_errors) -> (int, str):
        async with httpx.AsyncClient(timeout=10) as client:
            try:
                response = await client.get(url)
            except Exception as error:
                await queue_errors.put(url)
                return error
            else:
                return response.status_code, response.text
    
    
    async def async_main(file_name):
        queue_errors = asyncio.Queue()
        start = time.time()
    
        with open(file_name, "r") as f:
            urls_before = f.read().splitlines()
        urls = ["https://www." + url for url in urls_before]
    
        tasks = [fetch_url(url, queue_errors) for url in urls]
        results = await asyncio.gather(*tasks)
        total_responses = len(results)
        end_time = round(time.time() - start, 2)
    
        urls_with_request_error = []
        for i in range(queue_errors.qsize()):
            urls_with_request_error.append(await queue_errors.get())
        print()
    
        print(end_time, "seconds")
        print("Total responses:", total_responses)
        print("Total successful responses:", total_responses - queue_errors.qsize())
        print("Total failed responses:", queue_errors.qsize())
        return results, urls_with_request_error
    
    
    if __name__ == "__main__":
        asyncio.run(async_main(FILE_NAME))

    Т.к. asynс разделяет 1 поток между работающими программами (корутинами), то пришла мысль сделать работу данной программы на каждом ядре и обойти ограничение в один поток, однако, столкнулся с ошибкой серилизации (писал выше в вопросе).
    Возможно, я понимаю не всё (и/или не так) в параллельном программировании в python, поэтому буду удовлетворен ответом на вопрос ниже - можно ли ускорить эту программу выше путем реального распараллеливания (а не только конкурентного использования 1 потока) именно в python.
    Написано
  • Как в python использовать функции async внутри multiprocessing.Pool?

    @Phoenix2000h Автор вопроса
    Everything_is_bad, Я понимаю, что multiprocessing связан с многоядерностью. Просто, модуль async работает в одном потоке, а хотелось бы использовать корутину одну и туже, сразу в нескольких потоках. Т.е. на каждом ядре через multiprocessing, например, шли асинхронные запросы к сайтам, а не только на 1 ядре, как есть в async.
    Написано
  • Как в python использовать функции async внутри multiprocessing.Pool?

    @Phoenix2000h Автор вопроса
    Т.е. невозможно использовать на нескольких ядрах одну и туже async функцию, тем самым распаралеливая вычисления?
    Покидание границы процессов - это, в частности, может быть запрос к внешнему, относительно ОС, ресурсу (сайту)?
    Написано
  • Как исправить ошибку загрзки сертификата X 509 в Linux?

    @Phoenix2000h Автор вопроса
    Александр Ананьев, Не помогает, последняя версия Bios для ноутбука Acer 2020
    Initrd может быть здесь причастен?
    Написано
  • Как исправить ошибку загрзки сертификата X 509 в Linux?

    @Phoenix2000h Автор вопроса
    Александр Ананьев, в BIOS только UEFI boot mode есть, Secure boot - disabled (отключил)
    Написано
  • Как исправить ошибку загрзки сертификата X 509 в Linux?

    @Phoenix2000h Автор вопроса
    Александр Ананьев, Версия - Opensuse tumbleweed 20240524.
    При установке других линуксов такая же проблема. Как я понял проблема где-то в BIOS.
    Написано