首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >触发一系列Python脚本的API

触发一系列Python脚本的API
EN

Stack Overflow用户
提问于 2019-03-13 10:21:13
回答 1查看 290关注 0票数 0

我有3个python脚本

  1. grab.py:以Instagram帐户名作为输入,并输出包含所有追随者的文本文件。
  2. scrape.py:以grab.py的输出作为输入,并以csv形式输出每个帐户的详细信息(追随者计数、post计数等)。
  3. analyze.py:是一种基本的机器学习模型,它使用scrape.py的结果对帐户进行分析。

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

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

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

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

回答 1

Stack Overflow用户

发布于 2019-03-13 10:48:37

要从API获取信息并保存它,我建议使用异步执行如下

代码语言:javascript
运行
复制
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的大部分时间都花在等待结果上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55139481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档