Вопрос

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

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

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.

Спасибо.

Это было полезно?

Решение

Не используйте такой цикл со сном, это заблокирует 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

Другие советы

Это в точности похоже на мой ответ здесь

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

glib.timeout_add_seconds(60, ..)

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

тайм - аут_адд_секунды позволяет системе согласовывать тайм-ауты с другими событиями, в долгосрочной перспективе сокращая время пробуждения процессора (особенно если тайм-аут повторяется) и экономьте энергию для планеты(!)

gtk.timeout_add, похоже, устарел, поэтому вам следует использовать

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

gobject.timeout_add( 60*1000, my_timer )

попробуй:

import wx
wx.CallLater(1000, my_timer)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top