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()

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

4

1 回答 1

0

如果您可以使用另一个实用程序来执行此操作,我更愿意使用另一个工具(例如,*nixes 的 cron/anacron)来运行一个快速退出并发送消息的短脚本。

这种方法有一些好处:

  • 允许您忽略执行时间。如果你使用 time.sleep(),为了防止你的消息发出时漂移(比如 XMPP 服务器关闭了一天,而 60 秒或任何超时加起来为 24 分钟,你的消息将开始更接近到小时的底部而不是顶部),你真的应该为你的执行计时,然后从你的睡眠时间中减去它。这增加了代码的复杂性,需要更多的调试。
  • 让您不必担心保持进程处于活动状态。如果您的脚本虚假地遇到网络错误并崩溃,它会在一小时内自动重新启动。
  • 当您希望它们运行时,使用经过时间考验和久经考验的机制来运行作业。

编辑:我错过了停止“退出”命令的需要。如果您使用 crontab,则可以使用 python-crontab 自动插入/删除该作业的 crontab 条目。

于 2015-02-10T01:10:44.177 回答