2012-02-16 12 views
6

मैं वितरित कोड में प्रवेश करना शुरू कर रहा हूं और मुझे यह पता लगाने में परेशानी हो रही है कि कौन सा समाधान वहां मौजूद सभी सामानों के आधार पर मेरी आवश्यकताओं को फिट करता है। असल में मेरे पास डेटा की एक पायथन सूची है जिसे मुझे एक ही फ़ंक्शन के साथ संसाधित करने की आवश्यकता है। इस फ़ंक्शन में लूप के लिए कुछ घोंसला है लेकिन सूची में प्रत्येक आइटम के लिए बहुत लंबा (लगभग एक मिनट) नहीं लगता है। मेरी समस्या यह है कि सूची बहुत बड़ी है (3000+ आइटम)। मैं मल्टीप्रोसेसिंग देख रहा हूं लेकिन मुझे लगता है कि मैं बहु-सर्वर प्रसंस्करण के साथ प्रयोग करना चाहता हूं (क्योंकि आदर्श रूप से, यदि डेटा बड़ा हो जाता है तो मैं नौकरी के दौरान इसे अधिक तेज़ी से चलाने के लिए अधिक सर्वर जोड़ने की पसंद प्राप्त करना चाहता हूं) ।कार्यकर्ता नोड्स पर पायथन डेटा/कोड वितरित करने पर सुझाव?

मैं मूल रूप से कुछ है कि मैं के माध्यम से इस डेटा सूची वितरित कर सकते हैं की तलाश में (सुपर जरूरत नहीं और लेकिन यह अच्छा होगा अगर मैं भी इस के माध्यम से अपने कोड बेस वितरित कर सकता है)

तो मेरे सवाल है, क्या पैकेज कर सकते हैं मैं इसे प्राप्त करने के लिए उपयोग करते हैं? मेरा डेटाबेस hbase है इसलिए मेरे पास पहले से ही हैडऑप चल रहा है (हालांकि कभी भी डेटाबेस के लिए इसका उपयोग नहीं किया गया था)। मैंने अजवाइन को देखा और साथ ही मुड़ दिया लेकिन मैं उलझन में हूं जिस पर मेरी ज़रूरतें पूरी होंगी।

कोई सुझाव?

उत्तर

4

के साथ हाथ में हाथ काम मैं अत्यधिक celery सिफारिश करेंगे कर सकते हैं।

from celery.task import task 
@task 
def process(i): 
    # do something with i 
    i += 1 
    # return a result 
    return i 

आप आसानी से इस प्रकार की सूची parallelize कर सकते हैं::

results = [] 
todo = [1,2,3,4,5] 
for arg in todo: 
    res = process.apply_async(args=(arg)) 
    results.append(res) 

all_results = [res.get() for res in results] 

यह आसानी से बस अधिक अजवाइन कार्यकर्ताओं जोड़कर स्केलेबल है आप एक काम है कि अपनी सूची के एक आइटम पर चल रही है परिभाषित कर सकते हैं।

2

rabbitMQ देखें। पायथन बाइंडिंग pika के माध्यम से उपलब्ध हैं। एक साधारण work_queue से शुरू करें और कुछ rpc calls चलाएं।

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

... और अजवाइन RabbitMQ, चेकआउट robert pogorzelski's tutorial और Simple distributed tasks with Celery and RabbitMQ

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