API для запуска серии скриптов Python - PullRequest
0 голосов
/ 13 марта 2019

У меня есть 3 сценария Python

  1. grab.py: Принимает в качестве ввода имя учетной записи Instagram и выводит текстовый файл, содержащий всех его подписчиков.
  2. scrape.py: Принимает в качестве входных данных выходные данные из grab.py и выводит подробную информацию о каждой учетной записи (число подписчиков, количество постов и т. Д.) В форме csv
  3. analy.py: Базовая модель машинного обучения, использующая результаты scrape.py для анализа учетных записей.

3 сценария работают, как и ожидалось, по отдельности.Следующим шагом является создание конечной точки API, которая примет имя учетной записи в качестве параметра запроса, а затем запустит 3 вышеуказанных сценария для полученной учетной записи.Результаты окончательного анализа будут сохранены в базе данных.

Конечной точке также необходимо иметь механизм организации очередей для хранения полученных имен учетных записей.Очередь будет опрошена, и если имена учетных записей доступны, они будут обработаны последовательно.

Мой опыт разработки API ограничен, поэтому я не уверен в наилучшем подходе к решению этой проблемы.Мои вопросы:

  1. Должна ли моя конечная точка API быть написана на Python?Если да, является ли жизнеспособным фреймворк Flask?Если нет, какие еще у меня есть варианты?
  2. Существует ли какой-то конвейер, который я могу использовать для бесшовной интеграции трех сценариев?
  3. Есть ли идея поддерживать очередь впамять и опрос его с помощью отдельного потока, выполняющего бесконечный цикл while, хорошая идея?Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 13 марта 2019

Чтобы получить информацию из API и сохранить ее, я бы рекомендовал использовать asyncio, чтобы сделать что-то вроде

import asyncio
import aiohttp
import time
import aiofiles as aiof

FILENAME = "foo.txt"
loop = asyncio.get_event_loop()

async def fetch(session, url):
    async with session.get(url) as response:
        async with aiof.open(FILENAME, "a") as out:
            out.write((await response.json()))
            out.flush()



async def main():
    instagram-ids = [] #profile ids
    current = time.time()
    url = "INSTAGRAM_API_URL"
    tasks = []
    async with aiohttp.ClientSession() as session:
        for id in instagram-ids:
            tasks.append(loop.create_task(fetch(session, url.format(id))))
        responses = await asyncio.gather(*tasks)
    print(time.time() - current)

loop.run_until_complete(main())

, поскольку большая часть времени при работе с API тратится на ожидание результатов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...