2011-07-26 20 views
9

मैं शेड्यूलिंग कार्यों का एक तरीका ढूंढ रहा हूं जहां कई पिछले कार्यों को पूरा करने के बाद एक कार्य शुरू होता है।जटिल निर्भरताओं के साथ कार्य शेड्यूलिंग

मेरे पास कई सौ "संग्राहक" प्रक्रियाएं हैं जो विभिन्न स्रोतों से डेटा एकत्र करती हैं और इसे डेटाबेस में डंप करती हैं। एक बार इन्हें इकट्ठा करना समाप्त हो गया (कहीं भी 1 सेकंड से कुछ मिनट तक) मैं डेटाबेस में डेटा का विश्लेषण और समझने के लिए तुरंत "डेटा प्रोसेसिंग" प्रक्रियाओं का एक समूह बंद करना चाहता हूं। जब ये सभी समाप्त हो गए हैं, तो मैं एक अंतिम कार्य शुरू करना चाहता हूं और मुझे सारांश डेटा का ईमेल भेजना चाहता हूं।

मैं वर्तमान में एक गियरमैन कतार का उपयोग कर रहा हूं और "कलेक्टर" प्रक्रियाओं को पूरा करने के बाद डेटा प्रोसेसिंग कार्यों को टाइमर पर शुरू कर रहा हूं, लेकिन इसका मतलब है कि प्रसंस्करण चरण 10 मिनट के बाद शुरू होता है, भले ही कलेक्टर प्रक्रियाएं 3 के बाद समाप्त (या बदतर, अभी तक समाप्त नहीं हुआ है)।

आदर्श रूप से मैं विशिष्ट नियमों को निर्दिष्ट करने में सक्षम हूं जैसे प्रक्रिया ए और (बी या सी) पूर्ण होने पर प्रक्रिया शुरू करें X या "प्रक्रिया प्रक्रिया वाई जब 95% निर्दिष्ट प्रक्रिया पूरी हो गई हो या 10 मिनट बीत चुके हों "।

प्रक्रियाओं और निर्भरताओं को स्वचालित रूप से बनाया जाना चाहिए क्योंकि यह हर बार विभिन्न मानकों के साथ चलाया जाएगा (यानी मैं हर बार एक समान गणना नहीं कर रहा हूं)।

मैं कतारों और मॉनीटरों का उपयोग करके स्वयं के कुछ प्रकार के ग्राफ-निर्भरता ढांचे को लिख सकता हूं, लेकिन ऐसा लगता है कि इस तरह की चीज की तरह पहले से ही हल हो चुका है और मैं किसी ऐसे व्यक्ति की तलाश कर रहा हूं जिसने मुझे कुछ वर्णन किया है।

  • बी या सी
  • 95% पूरा या 10 मिनट

गुजरे पहले मैंने सोचा था कि अपनी प्रक्रियाओं बस अतुल्यकालिक थे पर:

+0

असंभव है कि यह PHP में किया गया है। – andho

उत्तर

7

"प्रक्रिया एक्स शुरू जब प्रक्रिया एक और (बी या सी) पूर्ण"

क्यों जाने कार्यकर्ता एक्स लांच subworkers ए, बी और सी और उन्हें आगे बढ़ने से पहले पूर्ण होने की प्रतीक्षा नहीं कर रहा? आपके पास एक प्रक्रिया एक्स हो सकती है जो एक ही समय में एक गियरमैन कार्यकर्ता और ग्राहक दोनों हो।

+0

+1, कोई कारण नहीं है कि आप चेयर गियरमैन कतार क्यों नहीं ले सकते हैं। तो क्लाइंट अल्फा गियरमैन कतार 1 को नौकरी भेजता है, यह नौकरी गियरमैन वर्कर 1 ए को भेजी जाती है।नौकरी का एक हिस्सा गियरमैन वर्कर 1 ए को गियरमैन क्लाइंट के रूप में कार्य करता है जो गियरमैन क्यूई 2 को उप नौकरी भेजता है जो बदले में नौकरी को दूसरे कार्यकर्ता (2 ए, या 1 बी उदाहरण के लिए) भेजता है। –

0

आप कुछ बहुत ही अजीब स्थिति है। उस स्थिति में आप स्थगित और वादे नामक कुछ का उपयोग कर सकते हैं। डेटा के लिए AJAX कॉल से निपटने के दौरान मैं जावास्क्रिप्ट में बहुत कुछ उपयोग कर रहा हूं। इसके साथ आप मूल रूप से निर्भरता ग्राफ को कॉन्फ़िगर कर रहे हैं।

लेकिन आपका मामला और भी जटिल है। जाहिर है आपको एक 'या', प्रगति निगरानी और टाइमर की आवश्यकता है।

यह सब कुछ बहुत ही गैर-PHP सामान की तरह है। PHP में बहुत खराब क्रॉन नौकरी का समर्थन है, असीमित कार्यों के लिए कोई समर्थन नहीं है और कोई टाइमर नहीं है। आप PHP में ऐसा क्यों कर रहे हैं?

+0

कार्य ऐतिहासिक कारणों से PHP में हैं- शुरुआत में उन्हें कतार का उपयोग करके पृष्ठभूमि की बजाय ऑनलाइन प्रक्रियाओं के रूप में किया गया था। अनिवार्य रूप से वे कमांड लाइन से यूनिक्स स्क्रिप्ट के रूप में चलते हैं, इसलिए यदि कोई अन्य भाषा/ढांचा है जो इन जटिल निर्भरताओं का बेहतर समर्थन करता है तो मैं उन्हें बदल सकता हूं? – Crashthatch