我有一个python脚本(在Mac OS X上运行),需要在互联网停机时重新启动。如果互联网出现故障,我想杀死当前的脚本,等待互联网重新启动,然后重新启动它。或者,如果可能,从内部重新启动该功能。
Python代码中有问题的部分如下:
import tweetstream
# ...
with tweetstream.FilterStream(username, password, track = words) as stream:
for tweet in stream:
db.tweets.save(tweet)
目前,如果互联网发生故障,流会停止并且不会重新连接。
答案 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()函数,当互联网连接恢复时,它将调用您的推文功能重新启动它。