我有一个应用程序,每隔几分钟就对一堆服务器进行轮询。为此,它为每台服务器生成一个线程来轮询(15台服务器),并将数据写回一个对象:
import requests
class ServerResults(object):
def __init__(self):
self.results = []
def add_server(some_argument):
self.results.append(some_argument)
servers = ['1.1.1.1', '1.1.1.2']
results = ServerResults()
for s in servers:
t = CallThreads(poll_server, s, results)
t.daemon = True
t.start()
def poll_server(server, results):
response = requests.get(server, timeout=10)
results.add_server(response.status_code);
CallThreads
类是一个辅助函数,用来调用函数(在本例中是带参数的poll_server()
(在本例中是s
和{
我该怎么处理?似乎没有办法killablockingthreadinPython。这个应用程序需要在Raspberry Pi上运行,所以像twisted这样的大型库不适合,事实上我还需要去掉requests库!在
据我所知,一个可能的场景是当一个线程“挂起”一个给定的服务器时,它将“永远”留在那里。下次查询服务器时,会产生另一个线程(
_start_new_thread
),直到Python崩溃为止。在可能不是你的(主要)问题,但你应该:
results
的并发访问。可能是^{关于“挂起”本身,请注意,“打开URL”(urlopen)时的timeout参数与建立连接的超时有关。不用于下载实际数据:
相关问题 更多 >
编程相关推荐