//last_cached為0了,則
pc->cached = 0;
pc->connection = null;
if ( rrp->peers->single ) //只有乙個backend,直接返回第0項
else
//當前失敗的次數大於 max_fails 了,則看是否到了再次嘗試的時間段,
//如果到了再次嘗試的時間,則返回這個backend,再次嘗試
if ( now - peer->accessed > peer->fail_timeout )
// 還沒有到再次嘗試的時間段,則設定比重為0,不可能再次被選到了
peer->current_weight = 0;
}else // 已經掛掉了,設定已經嘗試過了
pc->tries--; // 嘗試的backend 數量減少1
}//已經嘗試過這個backend了,遞減i再次嘗試一下
if ( pc->tries == 0 ) //嘗試次數為0了,失敗了
if ( --i == 0 ) // 嘗試次數不是0,遞減i看是不是0,如果為0則失敗了
}//遞減weight
peer->current_weight--;
}else
if ( now - peer->accessed > peer->fail_timeout )
peer->current_weight = 0;
}else
pc->tries--;
}//嘗試過了,round robin 迴圈 遞增指向下乙個
rrp->current++;
if ( rrp->current >= rrp->peers->number )
if ( pc->tries == 0 ) //嘗試次數為0了,則失敗了
if ( --i == 0 )
}peer->current_weight--;
}rrp->tried[ n ] |= m;
}//此時的peer指向找到的那個backend
pc->sockaddr = peer->sockaddr;
pc->socklen = peer->socklen;
pc->name = &peer->name;
/* ngx_unlock_mutex(rrp->peers->mutex); */
if ( pc->tries == 1 && rrp->peers->next )
}return ngx_ok;
failed:
peers = rrp->peers;
if ( peers->next ) // 如果有backup的,則嘗試backup備機
}//如果沒有backup,則將fails清0,再次嘗試
/* all peers failed, mark them as live for quick recovery */
for ( i = 0; i < peers->number; i++ )
/* ngx_unlock_mutex(peers->mutex); */
pc->name = peers->name;
return ngx_busy;
}//按照weight來返回乙個peer的下標
//找到當前比率最大的那項,返回這項的下標
}//找到最後了,還沒有比第i項比率大的,則說明這項就是,返回這項
if ( peer[i].current_weight > 0 )
return n;
}//走到這裡的時候,說明都是0了,重新初始化為滿額,接著迴圈找,總是能找到乙個
Perona Malik 演算法Python實現
最近正好在學習關於影象處理的東西,需要用到pm perona malik 演算法,所以就把自己的一些理解和 貼上來,希望能跟大家一起 pm演算法的具體原理可以網上查閱相關資料或者相關書籍,這裡只是簡要介紹大概的實現思路 一般而言,對乙個影象進行提取特徵之前,需要進行降噪濾波處理。最常用的應該是高斯濾...
Miller Rabin演算法 Python實現
用python實現了miller rabin的素性檢驗演算法 import random deflargeprime generate bit 1024 print generating large prime.i 1while true num random.randrange 2 bit 1 2...
LeetCode初級演算法的Python實現 鍊錶
之前沒有接觸過python編寫的鍊錶,所以這裡記錄一下思路。這裡前面的 是和leetcode中的一樣,因為做題需要呼叫,所以下面會給出。首先定義鍊錶的節點類。鍊錶節點 class listnode object def init self,x self.val x 節點值 self.next non...