PYGTK ke PYGI: setara dengan gtk.timeout_add

9

Saya telah mengonversi beberapa kode Python untuk menggunakan PYGI tetapi saya tidak tahu cara mengubah baris ini:

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Secara jelas, karena saya tidak benar-benar tahu perbedaan antara PYGTK dan PYGI, kode baru saya digunakan

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

seperti yang ditunjukkan di sini https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Kode lengkap yang saya coba konversi ada di sini http://pastebin.com/raw.php?i=aUtASRpy

Apa yang setara dengan

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

dalam PYGI?

Saya juga mengasumsikan PYGI adalah cara paling modern untuk membuat indikator persatuan

Saya juga mengasumsikan bahwa yang terbaik adalah indikator untuk memeriksa keadaan sesuatu daripada sesuatu untuk memberitahu indikator keadaan (push vs pull). Apakah saya tetap memiliki program python memeriksa sesuatu setiap detik?

Terima kasih!

onBootQuestioner
sumber

Jawaban:

1

Lebih baik mengajukan satu pertanyaan per ... err ... pertanyaan.

Pustaka standar Python memiliki threadingmodul yang memiliki Timerkelas yang melakukan apa yang Anda butuhkan. Dokumentasi .

Mengenai push vs pull - sudah pasti lebih baik ketika aplikasi Anda menerima pemberitahuan ketika sesuatu terjadi (push) daripada memeriksa jika sesuatu terjadi setiap detik (pull) - "kita sudah sampai di sana? Kita sudah sampai di sana? Sudahkah kita di sana ?. . "- karena memungkinkan aplikasi Anda untuk hanya tidur dan tidak melakukan apa-apa sampai diberitahukan, sebagai lawan melakukan pemeriksaan berulang yang sama setiap detik. Namun masalahnya adalah bahwa untuk beberapa jenis kegiatan mungkin sulit untuk mendapatkan pemberitahuan, jadi itu tergantung pada sifat aplikasi Anda. Melakukan pemeriksaan terlalu sering juga buruk untuk daya tahan baterai dan hal-hal lain.

Sergey
sumber
Terima kasih, ini membuat saya meretas bersama-sama pastebin.com/raw.php?i=0jLxZ994 ini dengan bantuan besar dari stackoverflow.com/questions/9812344/... Tapi, sekarang saatnya belajar bagaimana membuat semacam pendengar karena dengan apa Saya ada dalam pikiran mayoritas "jajak pendapat" akan menemukan bahwa tidak ada yang berubah, tetapi, itu untuk waktu lain. Terima kasih!
onBootQuestioner
19

Hanya untuk memastikan bahwa cara Gtk juga ada dalam jawaban:

Setara dengan

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

dalam introspeksi gobject (PyGI) adalah:

from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Namun, ketika memeriksa sesuatu secara teratur setiap x detik, Anda harus menggunakannya

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Ini memungkinkan Glib untuk mengelompokkan pengatur waktu dan karenanya menghemat daya, yang penting untuk perangkat seluler. Dari dokumentasi :

Pengelompokan pengatur waktu untuk mengaktifkan pada saat yang sama menghasilkan lebih banyak kekuatan dan perilaku yang efisien CPU jadi jika timer Anda dalam beberapa detik dan Anda tidak memerlukan timer pertama tepat satu detik dari sekarang, penggunaan glib.timeout_add_seconds ( ) lebih disukai daripada glib.timeout_add ().

xubuntix
sumber
4
Ini tampaknya jauh lebih baik daripada menggunakan threading. Terutama karena threading dapat menyebabkan bug dan penguncian aneh jika Anda tidak benar-benar tahu apa yang Anda lakukan.
Timo