繁体   English   中英

触发一系列Python脚本的API

[英]API to trigger series of Python scripts

我有3个python脚本

  1. grab.py:将一个Instagram帐户名作为输入,并输出一个包含其所有关注者的文本文件。
  2. scrape.py:将grap.py的输出作为输入,并以csv格式输出每个帐户的详细信息(关注者计数,发布计数等)
  3. analytics.py:一种基本的机器学习模型,该模型使用scrape.py的结果对帐户进行分析。

这三个脚本分别按预期工作。 下一步是创建一个API端点,该端点将以帐户名作为请求参数,然后为接收到的帐户触发上述3个脚本。 最终分析结果将存储在数据库中。

端点还需要具有排队机制来存储收到的帐户名。 队列将被轮询,并且如果帐户名可用,则将按顺序处理它们。

我的API开发经验有限,因此我不确定解决此问题的最佳方法。 我的问题是:

  1. 我的API端点应该用Python编写吗? 如果是,Flask框架是否可行? 如果没有,我还有其他选择吗?
  2. 是否可以使用某种管道将3个脚本无缝集成在一起?
  3. 将队列维护在内存中并使用运行无限while循环的单独线程轮询队列的想法是一个好主意吗? 有没有更好的方法可以做到这一点?

要从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的大部分时间都花在等待结果上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM