如果互联网出现故障,请重启python脚本

时间:2012-07-09 03:40:53

标签: python application-restart

我有一个python脚本(在Mac OS X上运行),需要在互联网停机时重新启动。如果互联网出现故障,我想杀死当前的脚本,等待互联网重新启动,然后重新启动它。或者,如果可能,从内部重新启动该功能。

Python代码中有问题的部分如下:

    import tweetstream

    # ...

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

目前,如果互联网发生故障,流会停止并且不会重新连接。

3 个答案:

答案 0 :(得分:1)

这取决于os。特定于os的方法很少。 第一个跨平台方法将是自己的ping,它将一些数据包发送到Internet服务器。如果您无法收到信息,则表示互联网已关闭。

答案 1 :(得分:1)

尝试使用this python implementation of ping作为子流程。因此,如果发生太多超时,那么你就会知道网络已关闭,你可以重新启动推文过程(但是,要做到这一点,你应该将整个推文过程放在自己的功能中)

答案 2 :(得分: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地址可以避免DNS查找,这可能会阻止urllib2.urlopen调用.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()函数,当互联网连接恢复时,它将调用您的推文功能重新启动它。