2010-01-05 181 views
0

我需要的是一個系統,我可以在其上定義簡單對象(比如可以具有「操作系統」和「版本」字段的「服務器」,以及其他元數據(IP,MAC地址等))。
我希望能夠以安全的方式從系統請求對象,例如,如果我定義一個「服務器」,例如,可以被3個客戶端同時使用,那麼如果4個客戶端要求服務器在同時,必須等到服務器被釋放。
此外,我需要能夠以某種查詢方式執行請求,例如allocate(type=System, os='Linux', version=2.6)尋找資源管理/分配系統

語言並不重要,但Python是一個優勢。

我在過去幾天一直在使用谷歌搜索,並沒有提出任何內容,也許這種系統有一個我不知道的更好的名字。

有什麼建議嗎?

謝謝!

+0

你是什麼意思的「系統」?用於Python或完全獨立應用程序的庫/框架(例如像DB)? – 2010-01-14 21:34:20

+0

既可以是獨立系統,也可以是除配置它之外已經處理所有事務的框架。我認爲任何小於這個值都是不值得的,我會自己寫。 – abyx 2010-01-15 08:03:32

回答

0

併發應用程序中的資源限制 - 例如「最多3個客戶端」示例 - 通常通過使用信號量(或更準確地說,計算信號量)來實現。

你通常用一些「count」初始化一個信號量 - 這是對該資源的併發訪問的最大數量 - 並且每當客戶端開始使用該資源時遞減該計數器,並在客戶端完成使用時遞增該計數器。信號量的實現保證了「增量」和「減量」操作是原子的。

您可以閱讀更多關於semaphores on Wikipedia。我不是太熟悉Python,但我認爲這兩個環節可以幫助:

+0

謝謝。我知道信號量。我正在尋找一個已經爲我完成工作的系統。 – abyx 2010-01-10 12:58:53

0

對於Java有具有此功能的一個很好的標準庫:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html

只需創建與信號量字段類:

class Server { 
    private static final MAX_AVAILABLE = 100; 
    private final Semaphore available = new Semaphore(MAX_AVAILABLE, true); 
    // ... put all other fields (OS, version) here... 
    private Server() {} 

    // add a factory method 
    public static Server getServer() throws InterruptedException { 
    available.acquire(); 
    //... do the rest here 
    } 

} 

編輯:

如果你想要更多的東西「con可比的「看待使用AOP技術,即創建基於信號量的同步方面。

編輯:

如果你想完全獨立的系統,我想你可以嘗試使用支持行級鎖定的旗語任何現代DB(如PostgreSQL的)系統。例如,爲每個表示一個服務器創建3行,如果它們是空閒的(例如「select * from server where is_used = 'N' for update」),則選擇它們,將所選服務器標記爲已用,最後取消標記,提交事務。

+0

是的,您在數據庫解決方案中描述的內容幾乎都是我自己的解決方案...謝謝 – abyx 2010-01-17 00:25:33