2015-02-10 80 views
0
def message_received(connect_object, message_node): 
    // if x event happens: 
    exit() 

jid = xmpp.JID(user) 
connection = xmpp.Client(jid.getDomain(), debug=[]) 
connection.connect(server) 
result = connection.auth(jid.getNode(), password, "qwerty") 

connection.RegisterHandler('message', message_received) 
connection.sendInitPresence() 

while connection.Process(1): 
    pass 

無論上面的代碼是做什麼的,我都希望每小時都會向接收者發送一條消息作爲提醒。即使收到一條消息並且控制權轉至message_received函數,每小時發送的消息應該繼續,除非遇到exit()如何使用python-xmpp(和gtalk)每隔x分鐘向收件人發送一條消息?

我在哪裏插入消息?我想使用time.sleep(),但任何其他解決方案也是可以接受的。

+0

我有現在使用的日期時間模塊,並在最後的while循環中使用。它工作正常。 – aste123 2015-02-10 01:45:04

回答

0

如果您可以使用其他實用程序來執行此操作,我寧願使用其他工具(例如,用於* nixes的cron/anacron)來運行快速退出併發送消息的短腳本。

這種方法有一定的好處:

  • 讓您忽略的執行時間。如果您使用time.sleep(),爲了防止消息傳出時發生漂移(例如XMPP服務器關閉一天,並且60秒或任何超時會增加24分鐘,則您的消息將開始向外靠近到最後一小時的底部),你真的應該計算你的執行時間,然後從你的睡眠時間中減去它。這增加了代碼的複雜性,這需要更多的調試。
  • 允許您不必擔心使進程保持活動狀態。如果您的腳本虛假地出現網絡錯誤並崩潰,它會在一小時內自動啓動。
  • 當您希望運行作業時,使用久經考驗並經過戰鬥驗證的機制來運行作業。

編輯:我錯過了需要停止'退出'命令。如果您使用crontab,則可以使用python-crontab爲該作業自動插入/刪除crontab條目。

相關問題