![](/img/trans.png)
[英]Python - No connection could be made because the target machine actively refused it
[英]Python: No connection could be made because the target machine actively refused it
我有一個多線程 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()
通過此類進行調用將有效地限制請求,因此服務器將能夠處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.