如何使用 python-xmpp(和 gtalk)每 x 分钟向收件人发送一条消息?

Posted

技术标签:

【中文标题】如何使用 python-xmpp(和 gtalk)每 x 分钟向收件人发送一条消息?【英文标题】:How to send a message to a recipient every x minutes by using python-xmpp (and gtalk)? 【发布时间】:2015-02-10 00:38:35 【问题描述】:
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(),但也可以使用任何其他解决方案。

【问题讨论】:

我现在使用了 datetime 模块,并在最后的 while 循环中使用了它。它工作正常。 【参考方案1】:

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

这种方法有一些好处:

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

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

【讨论】:

以上是关于如何使用 python-xmpp(和 gtalk)每 x 分钟向收件人发送一条消息?的主要内容,如果未能解决你的问题,请参考以下文章

python-xmpp 收到消息

来自 xtalk.py 的 Python-XMPP 回溯

使用 django 创建 gtalk 类型的应用程序

python-xmpp 并循环接收要接收的收件人列表和 IM 消息

如何在应用未运行时通知用户收到的 GTalk 聊天

如何在 ubuntu 终端上使用 gtalk/hangout? [关闭]