【问题标题】:How can I execute batches of requests simultaneously in python?如何在 python 中同时执行批量请求?
【发布时间】:2017-05-18 06:26:17
【问题描述】:

我正在使用 Reddit api 来支持一些 subreddit。我想同时为多个 subreddit 投票,使用 praw 库与 reddit api 交互。

我想为 /r/bookclub 的 27 个“热门”和“上升”帖子点赞:

subreddit = reddit.subreddit("bookclub")

for submission in subreddit.hot(limit=27):
    submission.upvote()

for submission in subreddit.rising(limit=27):
    submission.upvote()

我想使用异步或多处理来更快地执行此操作。我使用grequests 库一次完成所有.upvote(),到目前为止它工作正常,但我不确定它是否真的更好:

subreddit = reddit.subreddit("bookclub")

hot_upvotes = (grequests.get(submission.upvote()) for submission in subreddit.hot(limit=27))
grequests.map(hot_upvotes)

rising_upvotes = (grequests.get(submission.upvote()) for submission in subreddit.rising(limit=27))
grequests.map(rising_upvotes)

两个版本都支持 subreddit。我想知道是否可以同时运行hot_upvotesrising_upvotes 部分?

【问题讨论】:

    标签: python multithreading asynchronous praw grequests


    【解决方案1】:
    from threading import Thread
    import functools
    
    subreddit = reddit.subreddit("bookclub")
    
    def run_hot_upvotes(subreddit):
        hot_upvotes = (grequests.get(submission.upvote()) for submission in subreddit.hot(limit=27))
        grequests.map(hot_upvotes)
    
    def run_rising_upvotes(subreddit):
        rising_upvotes = (grequests.get(submission.upvote()) for submission in subreddit.rising(limit=27))
        grequests.map(rising_upvotes)
    
    Thread(target = functools.partial(run_rising_upvotes, subreddit)).start()
    Thread(target = functools.partial(run_hot_upvotes, subreddit)).start()
    

    尝试以下方法让两者同时运行,每个都在自己的线程中。

    【讨论】:

    • 有没有办法在运行时将参数传递给run_hot_upvotes()run_rising_upvotes() 函数?喜欢run_hot_upvotes(subreddit)
    • 我收到了NameError: global name 'subreddit' is not defined。需要弄清楚如何将它传递给每个函数。
    • 我添加了一个args,它成功了。 Thread(target=run_hot_upvotes, args=(subreddit,)).start()
    • 太好了,我还更新了我的答案以使用functools.partial 而不是args,这基本上是同一件事。
    猜你喜欢
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 2011-09-03
    • 2021-04-27
    相关资源
    最近更新 更多