Я работал с библиотекой Tweepy для python, чтобы получить доступ к публичному потоку твиттера и столкнулся с проблемой, когда, как только поток работает, он не останавливается. Теперь это имеет смысл для того, что он делает, но я хотел, чтобы он начал фильтрацию с пустым списком идентификаторов пользователей, и через некоторое время пользовательские идентификаторы добавляются в список после того, как кто-то твиттит определенное слово трека, чтобы после того, как они произнесли слово , трекер начинает отслеживать все свои твиты. Проблема заключается в том, что как только поток запускается с параметрами исходного фильтра, изменение переменных не влияет на фильтр; он просто продолжает использовать начальные аргументы.Открытый фильтр потока Twifty изменяющейся переменной
userIDs = []
trackWords = ["#Obama"]
def stream():
s = Stream(auth, StreamListener())
s.filter(follow = userIDs, track = trackWords)
я смог обойти эту проблему раньше, вспоминая определение потока снова после того, как добавляется новое ключевое слово, но у меня есть несколько потоков поиска, и я положил их в отдельных потоках, поэтому все они могут работать одновременно. Я не могу понять, как обновить потоки, поэтому попытка обновления фильтра, не задумываясь над определением, выглядит проще.
Я довольно новичок в программировании, поэтому, возможно, это фундаментальная концепция, которую я еще не знаю, но, надеюсь, есть простой трюк, чтобы заставить ее обновиться.
Вот мой код, если это поможет кому угодно. Выше было просто быстро вещь, чтобы помочь показать то, что я говорю:
userIDs = []
userNames = []
account = ['@DMS_423']
publicKeyWords = ['the','be','to','of','and','are','is','were','was']
class AStreamListener(StreamListener):
def on_status(self, status):
if status.author.screen_name not in userNames:
userNames.append(str(status.author.screen_name))
userIDs.append(str(api.get_user(str(status.author.screen_name)).id))
print status.author.screen_name, "has joined the game."
def uStream():
s = Stream(auth, StreamListener())
s.filter(follow = userIDs)
def pStream():
ps = PStream(pAuth, PStreamListener())
ps.filter(track = publicKeyWords)
def aStream():
adds = Stream(auth, AStreamListener())
adds.filter(track = account)
t1 = Thread(target = aStream)
t2 = Thread(target = uStream)
t3 = Thread(target = pStream)
def run():
t1.start()
t2.start()
t3.start()
run()