Вопрос по python – Запускать функцию каждые X минут - Python

12

Я использую Python и PyGTK. Я заинтересован в запуске определенной функции, которая получает данные из последовательного порта и сохраняет их каждые несколько минут.

В настоящее время я использую функцию sleep () во временной библиотеке. Чтобы иметь возможность выполнять обработку, я настроил мою систему следующим образом:

import time
waittime = 300 # 5 minutes
while(1):
    time1 = time.time()
    readserial() # Read data from serial port
    processing() # Do stuff with serial data, including dumping it to a file
    time2 = time.time()
    processingtime = time2 - time1
    sleeptime = waittime - processingtime
    time.sleep(sleeptime)

Эта настройка позволяет мне иметь 5-минутные интервалы между чтением данных с последовательного порта. Моя проблема в том, что я хотел бы иметь возможность, чтобы моя функция readserial () приостанавливала все, что происходит, каждые 5 минут и могла делать что-то все время вместо использования функции time.sleep ().

Любые предложения о том, как решить эту проблему? Многопоточность? Прерывания? Помните, что я использую Python.

Благодарю.

Ваш Ответ

4   ответа
4

def my_timer(*args):
    # Do your work here
    return True

gobject.timeout_add( 60*1000, my_timer )
24

он заблокирует gtk от обработки любых событий пользовательского интерфейса, вместо этого используйте gtk timer, например.

def my_timer(*args):
    return True# do ur work here, but not for long

gtk.timeout_add(60*1000, my_timer) # call every min
Error: User Rate Limit ExceededGLib.timeout_add(delay, function, arg)
Error: User Rate Limit Exceeded mouche
Error: User Rate Limit ExceededTrueError: User Rate Limit ExceededFalseError: User Rate Limit Exceeded
1

пытаться:

import wx
wx.CallLater(1000, my_timer)
Error: User Rate Limit Exceeded
10

мой ответ здесь

Если время не критично, чтобы быть точным с точностью до десятой доли секунды, используйте

glib.timeout_add_seconds(60, ..)

остальное как указано выше.

timeout_add_seconds позволяет системе выровнять тайм-ауты с другими событиями, что в конечном итоге уменьшает пробуждения ЦП (особенно, если тайм-аут повторяется) исохранить энергию для планеты(!)

Error: User Rate Limit Exceeded

Похожие вопросы