我不确定要使用的正确术语是什么。但是我的示例应该清除它。
我想听一个Reddit comment stream。
此流在发布到reddit(/ r / askReddit和/ r / worldNews)时实时接收评论,因此我不必轮询服务器。
但是,此功能是 blocking (阻塞),我需要将其放入几个线程。
这是我到目前为止所拥有的:
#! usr/bin/python3
from multiprocessing.dummy import Pool
import praw
def process_item(self, stream):
# Display the comment
for comment in stream:
print(comment.permalink)
def get_streams(reddit):
# Listen for comments from these two subReddits:
streams = [
reddit.subreddit('AskReddit').stream.comments(skip_existing=True),
reddit.subreddit('worldnews').stream.comments(skip_existing=True)
]
pool = Pool(4)
print('waiting for comments...')
results = pool.map(self.process_item, streams)
# But I want to do tons of other things down here or in `main()`.
# The code will never reach down here because it's always listening for comments.
我只能看到的解决方法是将整个程序逻辑放入process_item()
中,但这似乎很愚蠢。
我想我想process_item
继续向列表中添加评论,在后台 ,然后我可以根据需要处理这些评论。但是我不必陷入process_item()
在程序执行其他操作时,程序正在执行其他操作时,列表中正在排队等待执行的工作。
可能吗?如果是这样,您能给我一些有关模式的提示吗?
我是线程技术的新手。
答案 0 :(得分:0)
详细了解发布/订阅模式。 如果您想让线程使用线程模块。
多重处理是操作系统进程。进程和线程是不同的东西。如果您希望线程使用线程(当处理数据考虑GIL时)
要做任何事情:
您可以启动一些线程以从流中读取数据并将消息放入LIFO数据结构中 启动一些线程以从LIFO数据结构读取数据以处理您的数据