cfl*_*wis 4 python multithreading
我创建了一个访问美国和欧盟服务器的网络蜘蛛.美国和欧盟的服务器是相同的数据结构,但内部有不同的数据,我想整理它们.为了对服务器好,每个请求之间都有一个等待时间.由于程序完全相同,为了加快处理速度,我已经对程序进行了线程化,以便它可以同时访问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()
Run Code Online (Sandbox Code Playgroud)
只需try: ... except: ...在run方法中使用一个块.如果发生导致线程失败的奇怪事件,很可能会在代码中的某处抛出错误(而不是在线程子系统本身); 通过这种方式,您可以捕获它,记录它并重新启动线程.无论你是想要实际关闭线程并启动一个新线程,还是只是将try/except块封闭在一个while循环中,以便同一个线程继续运行,这就是你的调用.
另一种解决方案,如果你怀疑可能发生的事情,你无法通过Python的错误处理机制检测到,那就是启动一个监视器线程,定期检查其他线程是否正常运行.
| 归档时间: |
|
| 查看次数: |
1854 次 |
| 最近记录: |