gpt4 book ai didi

Python:无法建立连接,因为目标机器主动拒绝它

转载 作者:太空宇宙 更新时间:2023-11-03 15:46:35 25 4
gpt4 key购买 nike

我有一个多线程Python程序,它将不断打开与本地URL( http://testing.com/sendMessages_mock.php )的连接,我已经安装了WAMP并在本地有sendMessages_mock.php文件用于测试目的。有时,我会得到“[Errno 10061]无法建立连接,因为目标计算机主动拒绝它”

每个线程都会调用这个函数。每一秒,都会有数百个线程调用该函数。仅针对少数线程调用获取此异常。对此有什么想法吗?

def sendMessage(body):
try:
request = Request(url="http://testing.com/sendMessages_mock.php", data=json.dumps(body))
request.add_header('Authorization', 'key=' + CONST.API_KEY)
request.add_header('Content-Type', 'application/json')
response = urlopen(request)
responseData = response.read().decode('utf-8')

except Exception as exceptionErr:
print("Oops! " + str(traceback.format_exc()))

最佳答案

如果每秒调用过多是导致 WAMP 拒绝请求的问题,并且您想在 Python 端解决此问题,则可以编写限制器类来处理 sendMessage 执行并限制调用次数。

请注意,这是我第一次回答别人的问题,所以可能完全错误。请保持合理的怀疑态度。

#python 2.7
import threading

class Throttle(object):
def __init__(self, call_limit, interval):
self.call_limit = call_limit
self.interval = interval
self.cleaner = None
self.buffer = threading.Semaphore(call_limit)
self.calls_in_buffer = 0

def call(self, function, *args):
self.buffer.acquire()

self.calls_in_buffer += 1
try:
return function(*args)
except:
raise
finally:
if self.cleaner == None:
self._init_cleaner()

def _drain(self):
for i in range(self.call_limit):
self.calls_in_buffer -= 1
self.buffer.release()
self.cleaner = None

def _init_cleaner(self):
self.cleaner = threading.Timer(self.interval, self._drain)
self.cleaner.daemon = True
self.cleaner.start()

通过此类进行调用将有效地限制请求,因此服务器将能够处理它们。

关于Python:无法建立连接,因为目标机器主动拒绝它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41690456/

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