2017-12-11 19 views
0

나는 D-버스 이벤트를 기반으로 물건을 수행하는 파이썬 스크립트를 가지고, 그것의 단순화 된 버전을 추가 할 수 있습니다. 이제는 5 분마다 전화를 걸기를 원하는 시간 초과 콜백 기능을 원합니다.파이썬 돌이, 시간 제한 이벤트

mainloop.run()이 차단 된 함수 인 것으로 보이므로 메인 루프에 타이머를 추가해야한다고 생각합니다 ...?

내가로부터 몇 주기적으로 실행 기능을 구현하는 시도 : Executing periodic actions in Python 하지만 그들은 너무, 김 mainloop.run()가 실행되지 않습니다 차단된다.

제안 사항?

+0

D- 버스 신호는 INTRA 프로세스가 아닌 INTER 프로세스 프로토콜을위한 것입니다. 네, 그 주 루프는 "차단"입니다. 일정 간격으로 신호를 끄는 것이 목표라면 위에 나열된 프로세스를 시작하고 타이머가있는 * 다른 프로세스를 실행하거나 main.loop() 프로세스 버스 신호를 설정하는 일정에 따라 실행하십시오 너무 듣고있다. (더 기술적으로 올바른 수정 : DBus 신호) – DDeMartini

+0

D 버스 신호는 인터 프로세스입니다. 이들은 Udisk에서 왔으며 언급 된 스크립트에서 처리됩니다. 내가 추가하고 싶은 것은 D-Bus와는 독립적으로 시간을 할애하는 콜백 함수입니다. - 특히 (매우) 구체적으로, 이것은 미디어 플레이어를 추가하는 것입니다. 볼륨 레벨을 파일로 5 분마다 저장하고 싶습니다. 볼륨 변경은 볼륨이 너무 무거울 때마다 볼륨 손잡이를 돌리면 볼륨이 저장됩니다. 클릭 할 때마다 ..) – svenema

+0

하나의 프로세스에서 이것을 원할 경우 스테퍼 또는 타이머 기능을 주입하기 위해 메인 루프에 과부하를 걸어야하는 것처럼 들립니다. 또는 신호를 보내려는 타이머 프로세스를 포크하거나 단일 처리를 시도하지 않는 다른 프로세스를 실행하기 위해 신호를 떨어 뜨리려면 (별개) 간계 프로세스를 실행하십시오. – DDeMartini

답변

1

GMainloop의 컨텍스트에서 실행될 콜백 함수를 등록하는 glib의 g_timeout_add_seconds 함수를 사용할 수 있습니다. 파이썬에서는이 함수가 GObject에 캡슐화되어 있습니다. 아래 예제 코드를 시도해 볼 수 있습니다.

from gi.repository import GObject 

def hello(): 
    print("Hello world!\n") 
    return True 

GObject.timeout_add_seconds(1, hello) 
loop = GObject.MainLoop() 
loop.run() 
+0

나는 그저 그걸 찾고 있었어! 나는 그 순간 여행 중이며, 다음 달에 내가 돌아올 때 그것을 시험해 볼 것이다. – svenema

+0

완벽하게 작동합니다! 많은 감사합니다! – svenema