मुझे लगभग 150k Django वस्तुओं पर कार्यों को चलाने के लिए है। इसे करने का बेहतरीन तरीका क्या है? मैं ब्रोकर के रूप में Django ORM का उपयोग कर रहा हूँ। डेटाबेस बैकएंड MySQL है और chokes और सभी कार्यों के task.delay() के दौरान मर जाता है। संबंधित, मैं इसे एक फॉर्म जमा करने से भी लात मारना चाहता था, लेकिन परिणामी अनुरोध ने बहुत लंबे समय तक प्रतिक्रिया का समय दिया।django/अजवाइन: 150k Django वस्तुओं पर कार्यों को चलाने के लिए सर्वोत्तम प्रथाओं?
उत्तर
मैं भी "दलाल" के रूप में डेटाबेस का उपयोग कर के अलावा कुछ प्रयोग करने पर विचार होगा। यह वास्तव में इस तरह के काम के लिए उपयुक्त नहीं है।
from celery.task import TaskSet, task
from myapp.models import MyModel
@task
def process_object(pk):
obj = MyModel.objects.get(pk)
# do something with obj
@task
def process_lots_of_items(ids_to_process):
return TaskSet(process_object.subtask((id,))
for id in ids_to_process).apply_async()
इसके अलावा
, जब से तुम शायद 15000 प्रोसेसर पर कार्रवाई की जरूरत नहीं है:
हालांकि, तो आप इस भूमि के ऊपर से कुछ अनुरोध/प्रतिक्रिया चक्र से बाहर अन्य कार्य बनाने के लिए एक कार्य शुरू करके ले जा सकते हैं इन वस्तुओं समानांतर में सभी को, आप की मात्रा में वस्तुओं विभाजित कर सकते कहना 100 या 1000 की:
from itertools import islice
from celery.task import TaskSet, task
from myapp.models import MyModel
def chunks(it, n):
for first in it:
yield [first] + list(islice(it, n - 1))
@task
def process_chunk(pks):
objs = MyModel.objects.filter(pk__in=pks)
for obj in objs:
# do something with obj
@task
def process_lots_of_items(ids_to_process):
return TaskSet(process_chunk.subtask((chunk,))
for chunk in chunks(iter(ids_to_process),
1000)).apply_async()
धन्यवाद पूछो! @ एपीपीईएल और आपके सुझाव के साथ, मैं खरगोश एमक्यू ब्रोकर में चले गए और तुरंत लाभ देखा। इसके अलावा, इन कार्यों को शामिल करने की स्थापना की गई जो मैं प्राप्त करने की कोशिश कर रहा था !! –
क्या आप टिप्पणी कर सकते हैं कि यह कोड कैसे काम कर रहा है और यह कितने कार्य पैदा कर रहा है? मैंने पिछले 4 दिनों से कोशिश की है और यह मेरा डेटाबेस लाता रहता है। मैं केवल 80% सीपीयू का उपयोग कर रहा हूं जब यह चल रहा है, लेकिन "MySQL दूर चला गया है" और थोड़ा सा चलने के बाद त्रुटियों को कनेक्ट कर रहा हूं। –
लगता है जैसे आप अपने डेटाबेस को अधिभारित कर रहे हैं? क्या आप डेटाबेस में परिणाम संग्रहीत करते हैं? यह django-अजवाइन के लिए डिफ़ॉल्ट है। यदि आपको उनकी आवश्यकता नहीं है तो आपको '@ टास्क (ignore_result = True) 'सेट करना चाहिए या' CELERY_IGNORE_RESULT = True' का उपयोग करके उन्हें वैश्विक रूप से अक्षम करना चाहिए – asksol
इसके बजाय RabbitMQ का उपयोग करने का प्रयास करें।
खरगोश एमक्यू का उपयोग बहुत बड़ी कंपनियों में किया जाता है और लोग वास्तव में इस पर भरोसा करते हैं, क्योंकि यह इतना बड़ा ब्रोकर है।
मैं इंजन के रूप में beanstalkd (http://kr.github.com/beanstalkd/) का उपयोग करें। यदि आप django-beanstalkd का उपयोग करते हैं तो एक कार्यकर्ता और कार्य जोड़ना बहुत सरल है: https://github.com/jonasvp/django-beanstalkd/
यह मेरे उपयोग के लिए बहुत विश्वसनीय है।
कार्यकर्ता का उदाहरण:
import os
import time
from django_beanstalkd import beanstalk_job
@beanstalk_job
def background_counting(arg):
"""
Do some incredibly useful counting to the value of arg
"""
value = int(arg)
pid = os.getpid()
print "[%s] Counting from 1 to %d." % (pid, value)
for i in range(1, value+1):
print '[%s] %d' % (pid, i)
time.sleep(1)
एक नौकरी/कार्यकर्ता/कार्य का शुभारंभ करने के लिए:
from django_beanstalkd import BeanstalkClient
client = BeanstalkClient()
client.call('beanstalk_example.background_counting', '5')
(Django-beanstalkd का उदाहरण ऐप से निकाला स्रोत)
का आनंद लें!
- 1. पायथन (और Django) सर्वोत्तम आयात प्रथाओं
- 2. नेट धाराओं, वस्तुओं के बीच धाराओं गुजर, सर्वोत्तम प्रथाओं (सी #)
- 3. Django उपयोगकर्ता पंजीकरण फॉर्म सर्वोत्तम प्रथाओं
- 4. डाटाबेस परिनियोजन सर्वोत्तम प्रथाओं
- 5. रेडमाइन सर्वोत्तम प्रथाओं
- 6. पासवर्ड सर्वोत्तम प्रथाओं को संभालने?
- 7. प्रदर्शन के लिए सर्वोत्तम अभ्यास प्रथाओं
- 8. सिद्धांत 2 - i18n के लिए सर्वोत्तम प्रथाओं?
- 9. अजाक्स पृष्ठों के लिए पर्मलिंक सर्वोत्तम प्रथाओं
- 10. मोंगोडीबी कनेक्शन के लिए .NET सर्वोत्तम प्रथाओं?
- 11. पोस्टग्रेएसक्यूएल डेटा वेयरहाउसिंग के लिए सर्वोत्तम प्रथाओं को ट्यूनिंग
- 12. सर्वोत्तम प्रथाओं - NSManagedObjectContextObjectsDidChangeNotification आईओएस
- 13. PHP नेमस्पेस्ड फ़ंक्शन सर्वोत्तम प्रथाओं
- 14. मुक्त कार्यों का आंशिक टेम्पलेट विशेषज्ञता - सर्वोत्तम प्रथाओं
- 15. सर्वोत्तम प्रथाओं: कई छोटे कार्यों/विधियों, या तार्किक प्रक्रिया घटकों के साथ बड़े कार्यों inline?
- 16. फ्लेक्स सर्वोत्तम प्रथाओं?
- 17. कार्य रद्दीकरण सर्वोत्तम प्रथाओं
- 18. जावा स्थानीयकरण सर्वोत्तम प्रथाओं
- 19. सीएसएस रूपरेखा सर्वोत्तम प्रथाओं
- 20. असिंक्रोनस वेबरेक्वेस्ट सर्वोत्तम प्रथाओं
- 21. MATLAB प्रोग्रामिंग सर्वोत्तम प्रथाओं
- 22. निरंतर एकीकरण - सर्वोत्तम प्रथाओं
- 23. विंडोज रजिस्ट्री सर्वोत्तम प्रथाओं
- 24. जीडब्ल्यूटी समग्र सर्वोत्तम प्रथाओं
- 25. छवि ऑल्ट सर्वोत्तम प्रथाओं
- 26. शेयरपॉइंट सूची सर्वोत्तम प्रथाओं
- 27. फ्रैगमेंट सर्वोत्तम प्रथाओं
- 28. एसपीएल Autoloading सर्वोत्तम प्रथाओं
- 29. PHP सर्वोत्तम प्रथाओं?
- 30. एक्शनलिस्टर सर्वोत्तम प्रथाओं
यह ** बिल्कुल ** प्रश्न है जो मुझे चाहिए। बहुत ज्यादा अधिमूल्यित। – mlissner