我正在使用PRAW (Python包装器)为一个subreddit创建一个Reddit机器人,我对新提交的评论进行了调整,要求海报在他们的帖子上发表评论,以遵守发布规则。如果海报在1小时内没有在他们的帖子上发表评论,那么机器人应该删除该帖子。事件的顺序如下:
我的问题是等一个小时。我不能使用sleep()
阻塞一个小时,因为机器人将需要处理在该时间框架内已经完成的其他帖子(即每十五分钟发送一次帖子,但使用sleep()
一小时会导致机器人落后)。我也不认为我可以使用轮询,因为检查提交是阻塞线程。为了详细说明,我正在使用for submission in subreddit.stream.submissions(skip_existing=True):
检查新提交的内容,其中subreddit.stream.submissions()
是一个生成器/流,每当有人向subreddit (这里的文件)提交帖子时,它都会产生。
在这一点上,我完全不知道该去哪里。我需要为每个经过步骤1到4的帖子创建一个新任务,而不需要阻止每次提交帖子时都会执行更多相同的任务。如果你能提供一个指针,说明该往哪个方向走,或者我该如何做,我将不胜感激。万一你错过了,我就用Python了。
发布于 2020-08-03 13:25:08
您可能需要使用'RQ‘(Redis任务队列)。它将在应用程序中添加一个新的依赖项,但您将得到所需的东西。您可以在这里参考文档。
发布于 2020-08-03 13:48:46
对我来说,这个任务看起来像threading.Timer的工作。示例用法
import threading
def do_action(x):
print(f'Doing {x}')
t1 = threading.Timer(30.0, do_action, ['A'])
t1.start()
t2 = threading.Timer(20.0, do_action, ['B'])
t2.start()
t3 = threading.Timer(10.0, do_action, ['C'])
t3.start()
将打印Doing C
,Doing B
,Doing A
,每一个动作之间用10秒。
https://stackoverflow.com/questions/63230159
复制相似问题