如何在python中同时执行批处理请求?
我正在使用RedditAPI来更新一些子Reddit。我想同时升级多个子reddit,使用如何在python中同时执行批处理请求?,python,multithreading,asynchronous,praw,grequests,Python,Multithreading,Asynchronous,Praw,Grequests,我正在使用RedditAPI来更新一些子Reddit。我想同时升级多个子reddit,使用praw库与RedditAPI交互 我想对/r/bookclub的27个“热门”和“上升”帖子进行投票: subreddit = reddit.subreddit("bookclub") for submission in subreddit.hot(limit=27): submission.upvote() for submission in subreddit.rising(limit=2
praw
库与RedditAPI交互
我想对/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。我想知道的是,是否可以同时运行热投票
和上升投票
部分
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\u hot\u upvoces()
和run\u rising\u upvoces()
函数时,是否有方法将参数传递给它们?像run\u hot\u updrives(subreddit)
我得到一个name错误:未定义全局名称“subreddit”
。需要弄清楚如何将它传递给每个函数。我添加了一个args
,它成功了Thread(target=run\u hot\u upvoces,args=(subreddit,).start()
Great,我还更新了我的答案,使用了functools.partial
而不是args
,这基本上是一样的东西。