在此先感谢,请允许我对多处理/线程区域不了解。我对此很陌生...
目前,我成功获取了所有包含“ Yolo”一词的推文,并将其存储到本地DB(SQLite方式)。
现在,我正在考虑使用SQS。
我们说
1)我正在收听来自twitter服务器的所有随机Tweets 2)如果当前的tweet(状态)是我想要的,那么我要将其存储到DB中。这就是on_status(status)函数的作用。
2-1)比方说(不是在我的代码上,而是..)我成功地制作了temp_array,它应该在共享内存中包含每100条tweets(包含'yolo')(听说如果要使用multi -处理器工作)
3)在def on_status执行其工作时,我想使用功能名称send_to_sqs()使用单独的处理器(多处理)发送那些累积的100条tweet(在共享内存的temp_array中)。
对于步骤2)和3),我想使用两个不同的处理器。
但是我意识到这对我来说并不容易,因为函数send_to_sqs()和update_tweet_bundle()和table.insert(tweet_dict)都可以在CLASS中使用(不是主要功能)。
在这种情况下,有人可以启发我如何使用多处理吗? (很少有功能需要在事件驱动的类中运行单独的Core并在其中执行吗?)
P.S。
我要分离这些功能的原因是在向SQS发送累积的100条推文时,我想防止最坏的情况:在将其发送到SQS时,由于函数send_to_sqs()正在运行,我可能会错过一些有价值的推文。有价值的推文始终会传入我的侦听器(类StreamListener)。
class StreamListener(tweepy.StreamListener):
def __init__(self):
super(StreamListener, self).__init__()
self.temp_arr = []
self.len_temp_arr = 0
def is_useless(self, status):
return True if len(status.text) < 10 else False
def update_tweet_bundle(self, new_tweet):
self.temp_arr.append(new_tweet)
self.len_temp_arr+=1
def send_to_sqs(self):
# (1)
# send temp_Arr to SQS!
# inside temp_arr, there should be 100 tweets as a dictionary formats.
print('we sent tweet bundle to SQS(ASSUME!)')
# (2)
# empty out the temp_arr(suppose this in Shared Memory)
self.temp_arr = []
self.len_temp_arr = 0
def on_status(self, status):
if self.is_useless(status):
return
description = status.user.description
text = status.text
table = db[settings.TABLE_NAME]
try:
tweet_dict = dict(
user_description=description,
text=text,
)
table.insert(tweet_dict)
if self.len_temp_arr % 100 == 0:
self.send_to_sqs()
else:
self.update_tweet_bundle(tweet_dict) # I added for multi-thread..for later..
except ProgrammingError as err:
print(err)
def on_error(self, status_code):
pass
def main():
stream_listner = StreamListner()
stream = tweepy.Stream(auth = api.auth, listner = stream_listner)
stream.filter(track=['yolo'])
if __name__ == '__main__':
main()