2010-05-10 20 views
0

我在同一时间在Python中使用线程和xmlrpclib。定期地,我创建了一堆线程来通过xmlrpclib在远程服务器上完成一项服务。问题是,有些时候远程服务器没有回答。这导致线程永远等待一个永远不会得到的响应。随着时间的推移,处于这种状态的线程数量会增加,并且会达到系统允许线程的最大数量(我正在使用Fedora)。 我试图使用socket.setdefaulttimeout(10);但由此创建的异常将导致服务器停止运行。我用它在服务器端,但它似乎不工作:/由于同步通信造成太多线程

任何想法,我该如何处理这个问题呢?

回答

0

看起来你真正的问题是服务器挂起某些请求,如果客户端关闭套接字,就会死掉 - 线程只是实现的副作用。如果我理解你说的正确,那么解决这个问题的唯一方法就是修复服务器以响应所有请求,或者在网络故障时或者(最好)两者都更加健壮。

1

你正在做我通常所说的(最初是西班牙语xD)“快乐的道路规划”。你应该实现你的程序来处理不想要的情况,而不仅仅是你想要发生的情况。

的此线程只显示一个基本错误:您的服务器无法处理超时,并实现在加上超时导致服务器崩溃的方式刚性由于未处理的异常。

更有力地实现它:它必须能够承受一个例外,因为行为不端的客户端的服务器不能死。如果您现在不解决这类问题,那么您以后可能会遇到类似的问题。