Комментарии 31
Некоторые рекомендации по коду:
— избавление от global очень положительно сказывается на понимании сути мироздания
— не плохо было бы ловить KeyboardInterrupt и останавливать запущенные треды
— если хочется написать несколько одинаковых print bla-bla… некоторые из которых находятся в except, то самое время подумать про logging
— избавление от global очень положительно сказывается на понимании сути мироздания
— не плохо было бы ловить KeyboardInterrupt и останавливать запущенные треды
— если хочется написать несколько одинаковых print bla-bla… некоторые из которых находятся в except, то самое время подумать про logging
global
в сочетании с Threading
приведут вас в ад…Простите, больше так не буду :( Честно :(
А как передать список
А как передать список
replyed
треду? Так, чтобы он мог вносить в него изменения, и чтобы этот список был доступен другим тредам.Ну, первое что бы я сделал — это выпилил бы Threading вообще выдал каждому треду свою уникальную копию api. Т.е. сделал бы так, чтобы init() возвращал
И сделал бы так, чтобы init вызывался в начале run() функции
Так мы избавимся от race — conditions в tweepy.
А для записи айдишников твитов, на которые мы уже отвечали нужно использовать threading.Lock ну и так и быть — глобальную переменную или переменную класса:
tweepy.API(auth)
типаdef init():
....
return tweepy.API(auth)
И сделал бы так, чтобы init вызывался в начале run() функции
def run (self):
api=init()
Так мы избавимся от race — conditions в tweepy.
А для записи айдишников твитов, на которые мы уже отвечали нужно использовать threading.Lock ну и так и быть — глобальную переменную или переменную класса:
class TwiBot(threading.Thread):
replyed=set() # set гарантирует уникальность и проверка in работает быстрее
replyed_lock=threading.Lock()
def run():
....
need_reply=[] # будущий список твитов, на которые нужно ответить.
# захватываем блокировку replyed и быстро проходим по списку твитов
# составляя список тех, на которые нужно ответить
with TwiBot.replyed_lock:
for i in request: #XXX: почему request? response ведь!!!
if i.from_user!='thevar1able' and i.id not in TwiBot.replyed:
need_reply.append(i)
TwiBot.replyed.add(i.id)
# тут блокировка уже снята и другой поток может писать в replyed
# а наш поток может не спеша слать ответы.
for i in need_reply:
...
Tweet('@'+i.from_user+self.answer,i.id)
...
Блин, так обрадовался, думал что приду домой — реализую давно задуманного твиттер бота, а тут злые дадьки в комментах говорят что я попаду в ад, если буду использовать «global в сочетании с Threading»
Просто я не программист(в нормальном понимании этого слова), может у кого есть ссылка на хорошую и простую статью про написание твиттер-ботов(можно и на php)
Спасибо!
Просто я не программист(в нормальном понимании этого слова), может у кого есть ссылка на хорошую и простую статью про написание твиттер-ботов(можно и на php)
Спасибо!
Можете сильно не заморачиваться, для непрограммиста и этот код вполне на уровне.
Но для улучшения мыслительной кармы посмотрите сюда — www.python.org/dev/peps/pep-0020/
artifex.org/~hblanks/talks/2011/pep20_by_example.html
docs.python.org/tutorial/
Причем, это вовсе не сугубо к Питону относится, но и ко многим другим языкам.
Но для улучшения мыслительной кармы посмотрите сюда — www.python.org/dev/peps/pep-0020/
artifex.org/~hblanks/talks/2011/pep20_by_example.html
docs.python.org/tutorial/
Причем, это вовсе не сугубо к Питону относится, но и ко многим другим языкам.
В Python принято использовать конструкции вида:
if __name__ == '__main__:
main()
А вот в функции main уже делать вашу инициализацию и запуск тредов
if __name__ == '__main__:
main()
А вот в функции main уже делать вашу инициализацию и запуск тредов
давайте и я занудно попинаю
< if len(twit)<=140 and len(twit)>0:Это ж питон, и вас должно было напрячь, что вычисляете одно и то же два раза подряд
> if 0<len(twit)<=140:
Не могу найти запостенные скриптом твиты. Где они должны появляться?
tweepy клёвая ^_^
а access_token выдаётся на вечно или протухает?
А что такое id_reply? Зачем он нужен?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Простой Twitter-бот на Python