gpt4 book ai didi

python - 自修复 Python 线程

转载 作者:太空狗 更新时间:2023-10-30 01:56:18 25 4
gpt4 key购买 nike

我创建了一个可以同时访问美国和欧盟服务器的网络蜘蛛。美国和欧盟的服务器是一样的数据结构,但是里面的数据不一样,我想整理一下。为了对服务器友好,每个请求之间有一个等待时间。由于程序完全相同,为了加快处理速度,我对程序进行了线程处理,使其可以同时访问欧盟和美国服务器。

这种抓取将花费数周而不是数天的时间。会有异常(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com