2012-07-29 21 views
6

के साथ आरक्षण निर्धारित (रेस्तरां नहीं) मैं एक पायथन एप्लिकेशन लिख रहा हूं जो छात्रों को सीमित संख्या में वर्चुअल मशीनों तक पहुंच प्रदान करने के लिए ओपनस्टैक का उपयोग करता है।पाइथन

छात्र या तो भविष्य में या तो भविष्य में आरक्षण कर सकते हैं।

मुझे किसी भी समय एक्स पर निर्धारित वर्चुअल मशीनों की संख्या सीमित करने की आवश्यकता है, जबकि स्लॉट/आरक्षण उपलब्ध होने पर छात्रों को वीएम आरक्षित करने की इजाजत है।

आरक्षण वस्तुएं नीचे की तरह दिखती हैं (sqlalchemy)। मुझे पता चल जाएगा कि आरक्षण का समय और आरक्षण की लंबाई, किस बिंदु पर मुझे मौजूदा आरक्षणों के माध्यम से जाना होगा और देखें कि अनुरोध की गई अवधि में बहुत से आरक्षण हैं या नहीं। * _job फ़ील्ड एपीएसड्यूलर नौकरियों के नाम हैं।

class Reservation(Entity): 
    student = ManyToOne('Student', required=True) 
    class_id = ManyToOne('Class', required=True) 
    image = ManyToOne('Image', required=True) 
    # openstack image id filled in once the instance is started 
    instance_id = Field(UnicodeText) 

    # apscheduler jobs 
    stop_instance_job = Field(UnicodeText) 
    start_instance_job = Field(UnicodeText) 
    warn_reservation_ending_job = Field(UnicodeText) 
    check_instance_job = Field(UnicodeText) 

शेड्यूल एल्गोरिदम के उदाहरण या उस तरह के कुछ उदाहरणों को देखने के लिए कोई संकेतक? मैं यह भी स्पष्ट नहीं कर रहा हूं कि क्या खोजना है ...

धन्यवाद।

+2

यह मुझे डिजस्ट्रा के बैंकर के एल्गोरिदम के लिए एक आवेदन के रूप में हमला करता है, जिसे आम तौर पर नौकरी के शेड्यूलिंग में ज्यादा चर्चा नहीं की जाती है क्योंकि इसकी पूर्व शर्त (विशेष रूप से निष्पादन समय) को पहले से ही जानना मुश्किल होता है लेकिन जो आपके पास है। समस्या का सामान्य वर्ग "बैच शेड्यूलिंग" – msw

+0

ग्रेट है। इसके लिए धन्यवाद। :) अच्छी तरह से phrased, लघु, लेकिन पूरा सवाल के लिए – curtis

+1

+1। –

उत्तर

2

आपको ग्रिड आधारित शेड्यूलर देखना चाहिए। आम तौर पर शेड्यूलर को सही निष्पादन समय (या संसाधन उपयोग का समय) नहीं पता है और जटिल हेरिस्टिक का उपयोग यह अनुमान लगाने के लिए किया जाता है कि कोई समस्या कब होगी (PDF download Describing Scheduling on Grid basis पर ग्रिड शेड्यूलर पर ऐसे हेरिस्टिक देखें)। समय के साथ वर्कलोड का प्रतिनिधित्व करने के लिए एक बुनियादी ग्रिड के साथ एक आसान दृष्टिकोण आपकी आवश्यकताओं को पूरा करेगा। पाइथन में कोई भयानक ग्रिड ऑब्जेक्ट लाइब्रेरी नहीं है जो मुझे पता है (मैंने कुछ पहले सी ++ और पायथन में कुछ लागू किए हैं और वे बहुत कठिन नहीं हैं)। आपको बहु-आयामी वस्तुओं की आसान व्याख्या के लिए numpy पैकेज को देखना चाहिए - जो आसानी से पर्याप्त ग्रिड का अनुकरण या कार्यान्वित कर सकता है।

एमएसडब्ल्यू ने डिजस्ट्रा के बैंकर के एल्गोरिदम का उल्लेख किया जो कि नौकरी शेड्यूलिंग का एक रूप है - हालांकि आपकी समस्या वर्तमान स्थिति से अधिक भविष्य की स्थिति की परवाह करती है और आप सटीक रूप से भविष्य के अनुमान (वास्तविक मूल्य को जान सकते हैं) की भविष्यवाणी कर सकते हैं। इस प्रकार एम (अधिकतम संसाधन आरक्षण) ग्रिड द्वारा एन (एक संसाधन (केवल संसाधन हो सकता है) द्वारा एक टी (टाइमस्टेप्स) पंजीकृत है, जो आप पंजीकृत हैं, पंजीकृत हैं। यह निर्धारित करना कि किसी विशेष टाइमलॉट में कोई विशेष नौकरी निर्धारित की जा सकती है, एक खाली स्लॉट के लिए ग्रिड (प्रारंभ, रोकें) x (आवश्यक_resources) x (1, M) के उपखंड पर ओ (task_length * M) चेक है।

किसी विशेष नौकरी (प्रारंभ समय चुनना) के लिए पर्याप्त स्थान ढूँढना एक कठिन काम है और संशोधित डिजस्ट्रा के एल्गोरिदम द्वारा या किसी मानक शेड्यूलर द्वारा प्राप्त किया जाएगा (msw की टिप्पणी इस कार्य के लिए अधिक उपयोगी है टाइम्सलॉट क्षमता जांच)। ध्यान दें कि ऑनलाइन शेड्यूलर सामग्री की बहुत सारी ओएस प्रक्रिया शेड्यूलिंग के लिए विशिष्ट है जो ऑपरेशन के प्रकार (आई/ओ या नहीं) और जुर्माना के बारे में अधिक जानकारी देता है, जो अमूर्त संसाधन उपयोग से अपेक्षाकृत अधिक समय लेता है। इसलिए शेड्यूलर के लिए Google खोज आपको कई बार मनमाने ढंग से डेटा के लिए तकनीक के बजाय लिनक्स शेड्यूलर कार्यान्वयन प्रदान करेगी। सबसे कम नौकरी शेड्यूलर को देखने का प्रयास करें, जो समझाए जाने पर ओएस कार्यों पर अक्सर सरल और कम निर्भर हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^