Задать вопрос

Многопоточность в python?

У меня есть такая задача:
Необходимо делать запросы к серверу на разные url параллельно.
То есть:

Поток 1:
while 1:
    resp = requests.get("http://site.ru/path1")


Поток 2:
while 1:
    resp = requests.get("http://site.ru/path2")


....

Ссылок разных около 25. Как это лучше всего реализовать? asyncio?
  • Вопрос задан
  • 2791 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
kovalenko_jul_s
@kovalenko_jul_s Автор вопроса
import asyncio
import requests
from mysql import MySql
import concurrent.futures

def get_data(id):
    mysql = MySql()

    while True:
        resp = requests.get("http://site.ru/path?id=" + id)
        mysql.insert_data(resp)

    return 1


async def main():
    with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
        ids = [1,2,3,4,5, ... , N];

        loop = asyncio.get_event_loop()
        futures = [
            loop.run_in_executor(
                executor, 
                get_data, 
                id
            )
            for id in ids
        ]
        for response in await asyncio.gather(*futures):
            pass


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@lega
Для 25 ссылок можно и на потоках сделать, даже работать может быстрее если домены разные.
asyncio - это если что-то серьезней или просто охота покопаться в asyncio
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы