当前位置:  开发笔记 > 编程语言 > 正文

自修复Python线程

如何解决《自修复Python线程》经验,为你挑选了1个好方法。

我创建了一个访问美国和欧盟服务器的网络蜘蛛.美国和欧盟的服务器是相同的数据结构,但内部有不同的数据,我想整理它们.为了对服务器好,每个请求之间都有一个等待时间.由于程序完全相同,为了加快处理速度,我已经对程序进行了线程化,以便它可以同时访问EU和US服务器.

这种抓取需要几周而不是几天.会有例外情况,虽然我已经尝试处理程序中的所有内容,但可能会出现奇怪的情况.为了真正防御这个,我想抓住一个失败的线程,记录错误并重新启动它.最糟糕的情况是我失去了成千上万的页面,这比线程失败并且失去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()

David Z.. 8

只需try: ... except: ...run方法中使用一个块.如果发生导致线程失败的奇怪事件,很可能会在代码中的某处抛出错误(而不是在线程子系统本身); 通过这种方式,您可以捕获它,记录它并重新启动线程.无论你是想要实际关闭线程并启动一个新线程,还是只是将try/except块封闭在一个while循环中,以便同一个线程继续运行,这就是你的调用.

另一种解决方案,如果你怀疑可能发生的事情,你无法通过Python的错误处理机制检测到,那就是启动一个监视器线程,定期检查其他线程是否正常运行.



1> David Z..:

只需try: ... except: ...run方法中使用一个块.如果发生导致线程失败的奇怪事件,很可能会在代码中的某处抛出错误(而不是在线程子系统本身); 通过这种方式,您可以捕获它,记录它并重新启动线程.无论你是想要实际关闭线程并启动一个新线程,还是只是将try/except块封闭在一个while循环中,以便同一个线程继续运行,这就是你的调用.

另一种解决方案,如果你怀疑可能发生的事情,你无法通过Python的错误处理机制检测到,那就是启动一个监视器线程,定期检查其他线程是否正常运行.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有