मैं अन्य ग्राहकों के साथ कुछ डेटा साझा करने के लिए Dask वितरित कतारों का उपयोग करना चाहता हूं। मैं जो डेटा साझा करना चाहता हूं वह एक वर्ग डेटा का एक उद्देश्य है: जहां सूचकांक एक सूची है, डेटा या तो एक डस्क संग्रह का भविष्य है और नाम एक स्ट्रिंग है।

class data:
    index = list()
    data = None

    def __init__(self, name):
        self.name = name 

मैंने इस नई वस्तु को यहां क्रमबद्ध करने के लिए पंजीकृत करने के लिए register_generic का उपयोग किया:

from distributed.protocol import register_generic 
register_generic(metadata)
ds = data(name)
ds.data = darray 
ds.index = index
q = Queue("data").put(ds)

हालांकि मुझे यह त्रुटि मिली:

लेखन त्रुटि: 'डेटा' वस्तु को क्रमबद्ध नहीं कर सकता

क्या नई वस्तुओं को कतार में लगाने की अनुमति देने के अन्य उपलब्ध तरीके हैं? इसके बजाय आप क्या उपयोग करने का सुझाव देते हैं?

0
Mitchou 20 जिंदा 2021, 14:15

1 उत्तर

सबसे बढ़िया उत्तर

कतार के लिए डॉकस्ट्रिंग से:

Elements of the Queue must be either Futures or msgpack-encodable data
(ints, strings, lists, dicts).  All data is sent through the scheduler so
it is wise not to send large objects.  To share large objects scatter the
data and share the future instead.

अपनी कक्षा को एनकोड करने के लिए msgpack का एक्सटेंशन किए बिना, या एक वैकल्पिक प्रतिनिधित्व (जैसे, JSON) भेजने के लिए, आपको अपने मूल्य को Dask भविष्य में इस तरह लपेटना चाहिए

f = client.scatter(ds)
q.put(ds)

जब आप मूल्य प्राप्त करते हैं, तो आपको इसे खोलना होगा

value = client.gather(q.get())

ध्यान दें कि कतारें एक आला हैं और वितरित का अधिक उपयोग नहीं करती हैं।

0
mdurant 20 जिंदा 2021, 17:59
मैं यह जानने के लिए सोच रहा था कि pubsub और publish_dataset की तुलना में कतार (डेटा डालने और प्राप्त करने के मामले में) के लिए ये प्रतिबंध क्यों हैं?
 – 
Mitchou
20 जिंदा 2021, 18:07
Pubsub और वेरिएबल बहुत अधिक हाल के हैं, यह सब हो सकता है
 – 
mdurant
20 जिंदा 2021, 19:37