python - 如何在 python 中同时执行批量请求?

标签 python multithreading asynchronous praw grequests

我正在使用 Reddit api 为一些 subreddits 投票。我想使用 praw 库与 reddit api 交互,同时对多个 subreddit 进行投票。

我要为/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)

两个版本都对 Reddit 子版 block 进行了投票。我想知道是否可以同时运行 hot_upvotesrising_upvotes 部分?

最佳答案

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()

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

关于python - 如何在 python 中同时执行批量请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44035248/

相关文章:

c++ - 为什么互斥锁不需要互斥锁(而那个互斥锁需要互斥锁...)

javascript - 异步等待不等待函数完成

python - 使用 numexpr 的欧几里德范数

python - 如何将数据拆分到字典中?

python - 使用 sort(list, key=str.lower) 进行不区分大小写的排序

c++ - 互斥和变量更新

.net - 使用C#中的任务并行库,每个处理器运行一个并行任务

python - Pandas - 在数据框中添加一个标志列

c++ - boost::signals 插槽是同步调用还是异步调用?

javascript - 异步轮询