作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个可以同时访问美国和欧盟服务器的网络蜘蛛。美国和欧盟的服务器是一样的数据结构,但是里面的数据不一样,我想整理一下。为了对服务器友好,每个请求之间有一个等待时间。由于程序完全相同,为了加快处理速度,我对程序进行了线程处理,使其可以同时访问欧盟和美国服务器。
这种抓取将花费数周而不是数天的时间。会有异常(exception),虽然我已经尝试处理程序中的所有内容,但很可能会出现一些奇怪的事情。为了真正对此进行防御,我想捕获一个失败的线程,记录错误并重新启动它。最坏的情况是我丢失了数千页中的少数几页,这比线程失败和速度下降 50% 要好。然而,据我所读,Python 线程会悄无声息地死去。有人有什么想法吗?
class AccessServer(threading.Thread):
def __init__(self, site):
threading.Thread.__init__(self)
self.site = site
self.qm = QueueManager.QueueManager(site)
def run(self):
# Do stuff here
def main():
us_thread = AccessServer(u"us")
us_thread.start()
eu_thread = AccessServer(u"eu")
eu_thread.start()
最佳答案
只需在 run
方法中使用 try: ... except: ...
block 。如果发生导致线程失败的奇怪事情,很可能会在您的代码中的某处抛出错误(而不是在线程子系统本身中);这样你就可以捕获它,记录它,然后重新启动线程。您可以自行决定是否要实际关闭线程并启动一个新线程,或者只是将 try/except
block 包含在 while
循环中以便同一线程继续运行.
如果您怀疑可能会发生您无法通过 Python 的错误处理机制检测到的非常奇怪的事情,另一种解决方案是启动一个监视线程,该线程会定期检查其他线程是否正常运行。
关于python - 自修复 Python 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/717831/
我是一名优秀的程序员,十分优秀!