我想知道这件事以前有没有发生过?
我有一个从我们的GitHub企业实例下载大量信息的应用程序(目前不使用github3.py,但我正在考虑将其转换为使用github3.py)。基本上,它抓取189个repos,然后对每个回购,它拉分支,标签,并提交。这显然很慢,因为它必须串行地执行这么多HTTP请求。
我想知道是否可以让github3.py返回grequest对象,这样我就可以让grequests并行地执行请求了吗?或者,另一种方法可能是通过在github3.py中设置一个“并发级别”并让它处理并行处理请求来包装和隐藏grequests。或者可能是上下文管理器:
with github3.parallel():
tags = pull_tags(git_repo)
branches = pull_branches(git_repo)我认识到,想出一个能很好地并行化的API是很有挑战性的,因为它是一个非常不同的范例。这就是为什么我不想用这个来扰乱问题跟踪器的原因。
发布于 2014-11-02 04:09:38
这将是非常困难的。grequests和其他有关请求的包装器没有提供会话API (因为请求的会话不像它们应该的那样是线程安全的--也就是说,它们不是)。如果他们提供了一种这样做的方法,那可能会奏效。最好的方法是创建多个GitHub实例,每个worker greenlet/线程中有一个实例,并在每个线程的上下文中使用它们。通过这样做,您将在每个小页面上有一个会话,并且您的操作应该是安全的(只要您不在线程之间传递对象)。
https://stackoverflow.com/questions/26694006
复制相似问题