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

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

于 2012-07-09T04:22:01.410 回答
1

这取决于操作系统。很少有特定于操作系统的方法。第一个跨平台方法将是自己的 ping,它将向 Internet 服务器发送一些数据包。如果您无法收到信息,则意味着 Internet 出现故障。

于 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 地址可避免 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() 函数并且当互联网连接恢复时,它将调用您的推文函数以重新启动它。

于 2012-07-09T06:26:25.780 回答