Делать что-то каждые 60 секунд, асинхронно - PullRequest
0 голосов
/ 07 октября 2011

Вот базовый пример кода, чтобы показать базу IRC бота, который у меня работает:

s=socket.socket()
s.connect((foo, 1234))
s.send('NICK foo\r\n')
s.send('USER foo bar baz :qux\r\n')

while True:
    readbuffer=readbuffer+s.recv(1024)
    temp=string.split(readbuffer, "\n")
    readbuffer=temp.pop()

    for line in temp:
        line=string.rstrip(line)
        line=string.split(line)

        if(line[0]=="PING"):
            s.send("PONG %s\r\n" % line[1])

Это работает нормально, однако, скажем, я хотел выполнить команду для отправки сообщения каждые 60 секунд, как мне это сделать? Я предполагаю, что это как-то должно быть сделано асинхронно, из бесконечного цикла?

Ответы [ 3 ]

0 голосов
/ 07 октября 2011

Да, вы могли бы.И да, это было бы вне цикла, если бы вы не хотели тайм-аут 60-секундного интервала внутри цикла, скажем, проверяя время от времени время от времени.Я бы настроил интервальный таймер таким образом, чтобы он вызывал вашу функцию сообщения каждые 60 секунд, а затем позволял этой функции выполнять передачу асинхронно, как вы говорите.Может быть синхронизация (другой вид синхронизации :-) проблемы с посылками, которые происходят внутри цикла, но в теории это будет работать просто замечательно!

0 голосов
/ 07 октября 2011

Вы можете просто использовать поток для его асинхронного запуска.

Хороший пример: http://g -off.net / software / a-python-repeatable-threadingtimer-class

0 голосов
/ 07 октября 2011

Предлагаю прочитать эту статью . В нем подробно рассматриваются сопрограммы и асинхронная обработка в python. Включен набор примеров кода Python, с которым вы можете играть.

...