PYGTK ถึง PYGI: gtk.timeout_add เทียบเท่า


9

ฉันได้แปลงรหัส Python เพื่อใช้ PYGI แต่ฉันไม่สามารถหาวิธีการแปลงบรรทัดนี้:

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

โดยชัดแจ้งเนื่องจากฉันไม่ทราบความแตกต่างระหว่าง PYGTK และ PYGI จริงๆรหัสใหม่ของฉันจึงใช้

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

ตามที่แสดงไว้ที่นี่https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

รหัสเต็มฉันพยายามแปลงอยู่ที่นี่http://pastebin.com/raw.php?i=aUtASRpy

มีอะไรเทียบเท่า

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

ใน PYGI

ฉันยังสมมติว่า PYGI เป็นวิธีที่ทันสมัยที่สุดในการสร้างตัวบ่งชี้ความสามัคคี

ฉันยังสมมติว่ามันเป็นการดีที่สุดสำหรับตัวบ่งชี้ที่จะตรวจสอบสถานะของบางสิ่งบางอย่างมากกว่าสำหรับบางสิ่งบางอย่างเพื่อบอกสถานะตัวบ่งชี้ (push vs pull) มันเป็นไรไหมที่จะให้โปรแกรมไพ ธ อนตรวจสอบบางอย่างทุกวินาที?

ขอบคุณ!

คำตอบ:


1

จะดีกว่าถ้าถามคำถามหนึ่งข้อต่อ ... ข้อผิดพลาด ...

ไลบรารี่มาตรฐานของไพ ธ อนนั้นมีthreadingโมดูลซึ่งมีTimerคลาสที่ทำในสิ่งที่คุณต้องการ เอกสารประกอบ

เกี่ยวกับ push vs pull - มันจะดีกว่าเมื่อแอปพลิเคชันของคุณได้รับการแจ้งเตือนเมื่อมีบางสิ่งเกิดขึ้น (push) แทนที่จะตรวจสอบว่ามีบางสิ่งเกิดขึ้นทุกวินาที (pull) - "เราอยู่ที่นั่นหรือยัง . "- เนื่องจากอนุญาตให้แอปของคุณนอนหลับและไม่ทำอะไรเลยจนกว่าจะได้รับแจ้งซึ่งต่างจากการตรวจสอบซ้ำซ้ำทุกวินาที อย่างไรก็ตามสิ่งที่เป็นสำหรับบางประเภทของกิจกรรมอาจเป็นเรื่องยากที่จะได้รับการแจ้งเตือนดังนั้นมันขึ้นอยู่กับลักษณะของใบสมัครของคุณ การตรวจสอบบ่อยเกินไปก็ไม่ดีสำหรับอายุการใช้งานแบตเตอรี่และสิ่งอื่น ๆ


ขอบคุณนี่ทำให้ฉันแฮ็คด้วยกันpastebin.com/raw.php?i=0jLxZ994ด้วยความช่วยเหลือจากstackoverflow.com/questions/9812344/… แต่ตอนนี้ถึงเวลาเรียนรู้วิธีการเรียงลำดับผู้ฟังตั้งแต่ยังไง ฉันมีในใจ "โพล" ส่วนใหญ่จะค้นพบว่าไม่มีอะไรเปลี่ยนแปลง แต่นั่นเป็นอีกครั้ง ขอบคุณ!
onBootQuestioner

19

เพียงเพื่อให้แน่ใจว่าวิธี Gtk ก็มีอยู่ในคำตอบ:

มีค่าเท่ากับ

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

ใน gobject introspection (PyGI) คือ:

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

อย่างไรก็ตามเมื่อทำการตรวจสอบบางสิ่งอย่างสม่ำเสมอทุก ๆ x วินาทีคุณควรใช้

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

สิ่งนี้ช่วยให้ Glib จัดกลุ่มตัวจับเวลาและประหยัดพลังงานซึ่งเป็นสิ่งสำคัญสำหรับอุปกรณ์มือถือ จากเอกสาร :

การจัดกลุ่มของตัวจับเวลาเพื่อเริ่มทำงานในเวลาเดียวกันส่งผลให้เกิดการใช้พลังงานและประสิทธิภาพการทำงานของ CPU มากขึ้นดังนั้นหากตัวจับเวลาของคุณอยู่ในทวีคูณของวินาทีและคุณไม่ต้องการตัวจับเวลาแรกอย่างแน่นอนหนึ่งวินาทีจากนี้การใช้ glib.timeout_add_seconds ) เป็นที่ต้องการมากกว่า glib.timeout_add ()


4
ดูเหมือนว่าจะดีกว่าการใช้เธรด โดยเฉพาะอย่างยิ่งการทำเกลียวอาจทำให้เกิดข้อผิดพลาดและล็อคอัพหากคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่
Timo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.