0

インターネットがダウンしたときに再起動する必要がある Python スクリプト (Mac OS X で実行) があります。インターネットがダウンしている場合は、現在のスクリプトを強制終了し、インターネットが復旧するのを待ってから再起動します。または、可能であれば、関数を内部から再起動します。

Python コードの問題のあるセクションは次のとおりです。

    import tweetstream

    # ...

    with tweetstream.FilterStream(username, password, track = words) as stream:
        for tweet in stream:
            db.tweets.save(tweet)

現在、インターネットがダウンした場合、ストリームは停止し、再接続しません。

4

3 に答える 3

1

pingのこのPython実装をサブプロセスとして使用してみてください。したがって、タイムアウトが多すぎる場合は、ネットワークがダウンしていることがわかり、ツイートプロセスを再開できます(ただし、これを行うには、ツイートプロセス全体を独自の機能に配置する必要があります)。

于 2012-07-09T04:22:01.410 に答える
1

osに依存します。OS固有のメソッドはほとんどありません。最初のクロス プラットフォームの方法は、いくつかのパケットをインターネット サーバーに送信する独自​​の ping です。情報を受信できない場合は、インターネットがダウンしていることを意味します。

于 2012-07-09T03:46:42.813 に答える
0

おそらく、次のようなことを試すことができます。

import urllib2

def internet_on():
    try:
        response=urllib2.urlopen('http://74.125.131.94/',timeout=1)
        return True
    except urllib2.URLError as err: pass
    return False

74.125.131.94 は google.co.in の IP アドレスです。より迅速に応答すると思われるサイトを使用できます。数値の IP アドレスを使用すると、urllib2.urlopen 呼び出しがブロックされる可能性がある DNS ルックアップが回避されます。timeout=1 パラメータにより、インターネットが利用できない場合でも、urlopen の呼び出しに 1 秒以上かかることはありません。

あとは関数を呼び出すだけですinternet_on()true接続が の場合は戻りon、それ以外の場合は戻りfalseます。次に、すべてのつぶやきコードを関数内にラップして呼び出したいと思うかもしれません。(@inspectorG4dget提案どおり)。

編集: 継続的なチェックのために、次のようなことができます

def check():
    while not internet_on():
        pass
    print "internet connection is on"
    // call the tweet stuff function here.

次に、ストリームが停止したときに check() 関数を呼び出すだけで、インターネット接続が回復すると、ツイート関数が呼び出されて再開されます。

于 2012-07-09T06:26:25.780 に答える