我想知道这是否曾经出现过?
我有一个应用程序可以从我们的GitHub Enterprise实例下载大量信息(目前没有使用github3.py,但我正在考虑将其转换为使用github3.py)。基本上,它会抓取189个repos,然后对于每个repo,它会提取分支,标记和提交。这显然非常慢,因为它必须连续执行许多HTTP请求。
我想知道是否可以使github3.py返回grequest个对象,以便我可以让grequests并行执行请求?或者也许另一种方法是通过在github3.py中设置“并发级别”并使其同时处理并行请求来包装和隐藏grequests。或者也许是一个上下文管理器:
with github3.parallel():
tags = pull_tags(git_repo)
branches = pull_branches(git_repo)
我认识到,提出一种适用于并行化的API可能非常具有挑战性,因为它是如此不同的范例。这就是为什么我不想用这个混乱问题跟踪器。
答案 0 :(得分:1)
这将非常困难。 grequests
和请求周围的其他包装器不提供会话API(因为请求'会话不像应该的线程安全 - 即,它们不是)。如果他们提供了这样做的方法,那可能会奏效。执行此操作的最佳方法是创建多个GitHub
实例,每个工作者greenlet / thread中有一个实例,并在每个线程的上下文中使用它们。通过这样做,您将为每个greenlet创建一个Session,并且您的操作应该是安全的(只要您不在线程之间传递对象)。