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

上記のコードの動作に関係なく、何かのリマインダーとして 1 時間に 1 回受信者にメッセージを送信し続けたいと考えています。メッセージが受信され、制御がmessage_received関数に移った場合でも、exit()遭遇しない限り、1 時間ごとに送信されるメッセージは継続する必要があります。

メッセージはどこに挿入しますか? 使用したいのですtime.sleep()が、他の解決策も受け入れられます。

4

1 に答える 1

0

これを行うために別のユーティリティを使用しても問題ない場合は、別のツール (*nix の場合は cron/anacron など) を使用して、すぐに終了してメッセージを送信する短いスクリプトを実行することをお勧めします。

この方法にはいくつかの利点があります。

  • 実行時間を無視できます。time.sleep() を使用すると、メッセージが送信されたときのドリフトを防ぐために (XMPP サーバーが 1 日ダウンし、その 60 秒またはタイムアウトの合計が 24 分になるとします)、メッセージはより近くに送信され始めます。時間の一番上よりも一番下まで)、実際に実行時間を計ってから、それを睡眠時間から差し引く必要があります。これによりコードが複雑になり、より多くのデバッグが必要になります。
  • プロセスを維持することを心配する必要はありません。スクリプトが誤ってネットワーク エラーを検出してクラッシュした場合、スクリプトは 1 時間後に自動的に再開します。
  • ジョブを実行したいときにジョブを実行するために、長年にわたってテストされ、実証済みのメカニズムを使用します。

編集:「終了」コマンドで停止する必要がありませんでした。crontab を使用する場合、python-crontab を使用して、このジョブの crontab エントリを自動的に挿入/削除できます。

于 2015-02-10T01:10:44.177 に答える