मैं एक सेलेरी कार्य द्वारा लौटाई गई सूची से समूह बनाना चाहता हूं, ताकि कार्य में प्रत्येक आइटम के लिए सेट किया गया हो, समूह में एक कार्य जोड़ा जाएगा।एक सेलेरी कार्य को कैसे श्रृंखलाबद्ध करें जो समूह में एक सूची देता है?
उपयोग केस की व्याख्या करने के लिए यहां एक सरल कोड उदाहरण है। ???
पिछले कार्य से परिणाम होना चाहिए।
@celery.task
def get_list(amount):
# In reality, fetch a list of items from a db
return [i for i in range(amount)]
@celery.task
def process_item(item):
#do stuff
pass
process_list = (get_list.s(10) | group(process_item.s(i) for i in ???))
मैं शायद यह सही ढंग से आ नहीं हूँ, लेकिन मैं बहुत यकीन है कि यह कार्य के भीतर से कार्य कॉल करने के लिए सुरक्षित नहीं है कर रहा हूँ:
@celery.task
def process_list():
for i in get_list.delay().get():
process_item.delay(i)
मैं सेकंड काम से परिणाम की जरूरत नहीं है ।
दरअसल, किसी कार्य से कार्य को कॉल न करें। यह deadlocks का कारण बन जाएगा। कहो कि आपके पास एक कार्यकर्ता है। आप अपना काम कॉल करते हैं, जो कार्यकर्ता 1 से जुड़ा होता है, फिर दूसरा कार्य कहता है। उस कार्य को संसाधित करने के लिए कोई कार्यकर्ता नहीं है और सब कुछ लटका होगा। जब आप श्रमिक जोड़ते हैं, तो यह नास्टनेस थोड़ा बेहतर हो जाता है, लेकिन आप हमेशा एक ही कार्य (और समांतरता खोने) के साथ कई श्रमिकों को जोड़ देंगे। – mlissner