#python #sockets #time #irc
#python #сокеты #время #irc
Вопрос:
if data.find('!google') != -1:
nick = data.split('!')[ 0 ].replace(':','')
if last_google 5 > time.time():
sck.send('PRIVMSG ' chan " :" ' Wait a few seconds' "rn")
else:
last_google = time.time()
try:
gs = GoogleSearch(args)
gs.results_per_page = 1
results = gs.get_results()
for res in results:
sck.send('PRIVMSG ' chan " " res.title.encode("utf8") 'rn')
sck.send('PRIVMSG ' chan " " res.url.encode("utf8") 'rn')
print
except SearchError, e:
sck.send('PRIVMSG ' chan " " "Search failed: %s" % e " " 'rn')
Хорошо, я пытаюсь заставить скрипт подождать несколько секунд, прежде чем другой пользователь сможет «!google», чтобы пользователи не наводняли канал или бота.. Очевидно, что этот скрипт не работает, я неправильно реализую функцию time или что-то упускаю
Комментарии:
1. Где существует
last_google
переменная? Это локальная переменная, переменная класса, глобальная переменная или что? Что вы увидите, если распечатаете текущее значениеlast_google
перед сравнением?
Ответ №1:
Это все в цикле?
Одна из проблем заключается в том, что вы задаете last_google значение time.time() в начале вашего запроса. Если запрос выполняется медленно, часть этого времени может уже пройти к тому времени, когда вы снова перейдете к оператору if.
Типичный блок «ожидания» может выглядеть примерно так:
while time.time() < last_google 5:
sleep(1) # You don't want to keep using the cpu, so let your process sleep
Комментарии:
1. Я думаю, что функция sleep () полностью остановит скрипт, я попробовал цикл while, но он ничего не делает
2. Если то, что вы хотите сделать, это остановить ваш скрипт на определенное время, time.sleep (x) — это способ сделать это. Если вы всегда пытаетесь подождать 5 секунд с момента установки last_google, поместите
sleep(last_google 5 - time.time())
в свой оператор if. Как и спрашивал Грег Хьюджилл, важен контекст, в котором выполняется этот код, поэтому вам нужно будет предоставить нам немного больше информации для получения дополнительной помощи.