Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中同时执行批处理请求?_Python_Multithreading_Asynchronous_Praw_Grequests - Fatal编程技术网

如何在python中同时执行批处理请求?

如何在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

我正在使用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=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
,这基本上是一样的东西。