आयात करने में असमर्थ एक अजवाइन कार्य चल रहा है मैं दो सर्वर हैं: एक एक Django अनुप्रयोग चल रहा है और एक दोनों एक RabbitMQ कतार और एक अजवाइन कार्यकर्ता चल रहा है। कतार/कार्यकर्ता चल रहे सर्वर पर मेरे tasks.py एक कार्य इस प्रकार शामिल हैं:जब उस कार्य
@task(queue="reports")
def test_task():
time.sleep(120)
मेरा लक्ष्य एक Django दृश्य से इस कार्य को निष्पादित करने के लिए है। चूंकि कार्य के लिए कोड django दृश्य से भिन्न सर्वर पर है, इसलिए मैं कार्य को कॉल करना चाहता हूं, मैं कार्य को डीजेंगो से कार्यकर्ता मशीन में भेजने के लिए निम्न कोड का उपयोग करने का प्रयास कर रहा हूं।
send_task("tasks.test_task", task_id=task_id, args=[], kwargs={}, publisher=publisher, queue=queue)
मैं इस विधि here पाया है, लेकिन अब तक का परीक्षण यह काम नहीं किया है।
मैं सेलरी कार्यकर्ता सर्वर पर अजवाइन कार्यकर्ता लॉगफाइल पर पूंछ-एफ के साथ परीक्षण कर रहा हूं, फिर ब्राउज़र में send_task युक्त दृश्य के यूआरएल पर नेविगेट कर रहा हूं। मैं पूंछ के उत्पादन में 'प्राप्त' के रूप में दिखाने के लिए काम की तलाश में हूं, लेकिन ऐसा नहीं है।
सेलेरी कार्यकर्ता का लॉग स्तर DEBUG है, लॉगफाइल दिखाता है कि कार्य उचित नाम से पंजीकृत है, और django ऐप की सेटिंग्स.py में rabbitmq सर्वर के लिए सही आईपी और प्रमाण-पत्र शामिल हैं। अलग-अलग दृष्टिकोणों की कोशिश करने में, मैंने कभी-कभी सेलेरी लॉगफाइल में एक त्रुटि संदेश देखा है जब मैंने एक वैध कार्य नहीं था (यानी send_task ('asdf') को भेजने के लिए भेजा गया स्ट्रिंग बदल दिया है। इसने लॉगफाइल में एक अनियंत्रित त्रुटि उत्पन्न की। हालांकि, यह कभी-कभी होता है, और अब तक सेटिंग्स और कॉल के विभिन्न संयोजनों का परीक्षण करने में, मुझे व्यवहार को विश्वसनीय रूप से दोहराने का कोई तरीका नहीं मिला है।
CELERY_RESULT_BACKEND = 'amqp'
BROKER_HOST = 'the.correct.IP.address'
BROKER_USER = 'the_correct_user'
BROKER_PASSWORD = 'the_correct_pass'
BROKER_VHOST = 'the_correct_vhost'
BROKER_PORT = 5672
मैं आसपास googled है और send_task पर ज्यादा नहीं मिला है:
इसके अलावा, इस प्रासंगिक (हटाया वास्तविक मूल्यों के साथ) Django परियोजना पर settings.py की धारा है। क्या मैं गलत क्या कर रहा हूं पर कोई विचार?
मुझे यह जानने में दिलचस्पी होगी कि आपने दोनों मशीनों के बीच अपना कोड कैसे साझा किया है। यहां एक प्रश्न है जो मैंने उससे लिखा था: http://stackoverflow.com/questions/28592243/celery-tasks-functions-web-server-vs-remote-server धन्यवाद! – lajarre