2015-04-29 9 views
5

मेरे पास कई कर्मचारी हैं जो साइडकीक का उपयोग करके चलाए जा रहे हैं और सिडेटिक का उपयोग करके निर्धारित हैं। मैं साइडकीक-प्रो की बैचिंग कार्यक्षमता के समान कॉलबैक निष्पादित करने से पहले सभी श्रमिकों को पूरा करने के लिए इंतजार करने का सबसे अच्छा तरीका सलाह ढूंढ रहा हूं। संभावित विकल्पों पर कोई सलाह बहुत सराहना की जाएगी!समांतर साइडकीक श्रमिकों के लिए एक और विधि कॉल करने से पहले सभी को पूरा करने के लिए कैसे प्रतीक्षा करें?

+0

दुर्भाग्य से सबसे अच्छा तरीका है मैं मिल गया है करने के लिए है " पता है "बैच में कितनी नौकरियां हैं, और फिर पूर्ण होने पर गिनती रखें (या त्रुटि)। – vereecjw

+0

एक कारण है कि मैं उस सुविधा के लिए पैसे लेता हूं: यह बेहद उपयोगी है और साथ ही साथ निर्माण करना बेहद मुश्किल है। मुझे लगता है कि आपके पास कोई बजट नहीं है? –

+0

यह एक ऐसा कदम है जो मुझे लगता है कि हम अंततः काम करेंगे, लेकिन जब तक हमारी ईटीएल प्रक्रिया अधिक नहीं हो जाती है और हम अधिक डेटा स्रोतों/अधिक श्रमिकों का उपयोग कर पढ़ रहे हैं, तो इस चरण में यह 100% आवश्यक नहीं है। यह निश्चित रूप से हमारे रडार पर कुछ है, लेकिन इस बिंदु पर, मैं सिर्फ एक अस्थायी समाधान की तलाश में हूं। – AvocadoRivalry

उत्तर

2

सरल उपयोग के मामलों के लिए आप प्रत्येक कतार के लिए लंबित नौकरियों की गिनती के लिए stats पर मतदान कर सकते हैं।

तो यदि आप जानते हैं कि आपकी सभी नौकरियां एक विशिष्ट कतार में जाती हैं, और अन्य जगहों से उस कतार में कोई और नौकरियां नहीं जा रही हैं तो यह पर्याप्त होगा। और अधिक उन्नत/जटिल उपयोग के मामलों के लिए आप एक घटना API source

एक और सरल समाधान एक Redis आधारित काउंटर (के बाद से आप पहले से ही Redis उपयोग कर रहे हैं) हर काम से उपयोग करें और यह atomically decrement है, और publish उल्लेख कर सकते हैं एक बार गिनती शून्य तक पहुंच ।

0

आप एक विधि लिख सकते हैं:

def wait_for_sidekiq 
    sleep(1) until Sidekiq::Workers.new.size == 0 && Sidekiq::Queue.new.size == 0 
end 

मैंने देखा कि आपने यह सुनिश्चित करें कि नौकरियों पहली जगह में पंक्तिबद्ध हो गया बनाने के सुझाव है:

def wait_for_queuing 
    sleep(1) until Sidekiq::Queue.new.size > 0 || Sidekiq::Workers.new.size > 0 
end 

यह आवश्यक है, क्योंकि कभी-कभी पहले नौकरियों को छोड़ने से पहले विधि को कुछ मिलीसेकंड निष्पादित किया जा सकता है, ताकि वह बिल्कुल इंतजार न करे।

0

आप इस Sidekiq-batch gem देखना चाहिए, मैं पहले से ही यह कोशिश करते हैं और यह सिर्फ तरह Sidekiq के प्रो बैच काम करता है, और यह मुक्त

आशा है यह मदद कर सकता है

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

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