একটি তৈরি করা হচ্ছে AsyncResultটাস্ক আইডি থেকে অবজেক্ট হয় ভাবে সুপারিশ করা প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী টাস্ক অবস্থা প্রাপ্ত যখন একমাত্র জিনিস আপনি টাস্ক আইডি হল।
তবে, সেলারি ৩.x হিসাবে, উল্লেখযোগ্য সতর্কতা রয়েছে যা যদি মানুষ তাদের দিকে মনোযোগ না দেয় তবে তারা তাদের কামড় দিতে পারে। এটি সত্যই নির্দিষ্ট ব্যবহারের ক্ষেত্রে দৃশ্যের উপর নির্ভর করে।
ডিফল্টরূপে, সেলারি কোনও "চলমান" রাষ্ট্র রেকর্ড করে না।
সেলারিটি কোনও কাজ চলছে কিনা তা রেকর্ড করার জন্য আপনাকে অবশ্যই সেট আপ task_track_startedকরতে হবে True। এখানে এটি একটি সাধারণ কাজ যা এটি পরীক্ষা করে:
@app.task(bind=True)
def test(self):
print self.AsyncResult(self.request.id).state
যখন task_track_startedহয় Falseযা ডিফল্টভাবে হয়, রাষ্ট্র শো PENDINGযদিও কাজের শুরু হয়েছে। আপনি যদি সেট আপ task_track_startedকরেন True, তবে রাষ্ট্রটি হবে STARTED।
রাষ্ট্রটির PENDINGঅর্থ "আমি জানি না"।
AsyncResultরাষ্ট্রের সাথে একটি এর PENDINGঅর্থ সেলারি যে কাজের স্থিতি জানে না তার চেয়ে বেশি কিছু বোঝায় না। এটি কোনও কারণেই হতে পারে।
একটি জিনিসের জন্য, AsyncResultঅবৈধ টাস্ক আইডির সাহায্যে তৈরি করা যেতে পারে। এই জাতীয় "কাজগুলি" সিলারি দ্বারা মুলতুবি হিসাবে বিবেচিত হবে:
>>> task.AsyncResult("invalid").status
'PENDING'
ঠিক আছে, সুতরাং কেউ স্পষ্টতই অবৈধ আইডিগুলিকে খাওয়াবে না AsyncResult। যথেষ্ট উপযুক্ত, তবে এটি কার্যকরভাবে কার্যকর হয়েছে যা AsyncResultসফলভাবে চালিত কোনও কাজকেও বিবেচনা করবে তবে সেলেরি তা ভুলে গেছে PENDING। আবার কিছু ব্যবহারের ক্ষেত্রেও এটি সমস্যা হতে পারে। ইস্যুর অংশটি কাজের ফলাফলগুলি রাখার জন্য সিলারি কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে, কারণ এটি ফলাফলের পিছনে "সমাধিপাথরের" প্রাপ্যতার উপর নির্ভর করে। ব্যবহার ( "Tombstones" তথ্য খন্ডে রেকর্ড কিভাবে কাজটি সমাপ্ত সেলারি ডকুমেন্টেশন শব্দটি ব্যবহার।) AsyncResultএ সব কাজ না যদি task_ignore_resultহয় True। আরও উদ্বেগজনক সমস্যা হ'ল সিলারি সমাধিস্থলগুলি ডিফল্টরূপে সমাপ্ত করে। দ্যresult_expiresডিফল্টরূপে সেটিংস 24 ঘন্টা সেট করা থাকে। সুতরাং আপনি যদি কোনও কাজ চালু করেন এবং দীর্ঘমেয়াদী স্টোরেজে আইডিটি রেকর্ড করেন এবং আরও 24 ঘন্টা পরে, আপনি AsyncResultএটির সাথে একটি তৈরি করেন, স্থিতিটি হবে PENDING।
সমস্ত "আসল কাজ" শুরু PENDINGরাজ্যে। সুতরাং PENDINGকোনও টাস্কে উঠার অর্থ এই হতে পারে যে এই টাস্কটির জন্য অনুরোধ করা হয়েছিল তবে এটি (যে কারণেই হোক) এর চেয়ে বেশি কখনও অগ্রসর হয়নি। বা এটির অর্থ টাস্কটি দৌড়াতে পারে তবে সেলারি এর অবস্থা ভুলে গিয়েছিল।
আউচ! AsyncResultআমার জন্য কাজ করবে না। আমি আর কী করতে পা্রি?
আমি নিজের কাজগুলিতে নজর রাখার চেয়ে লক্ষ্যগুলি অনুসরণ করা পছন্দ করি । আমি কিছু টাস্কের তথ্য রাখি তবে লক্ষ্যগুলি পর্যবেক্ষণ করা এটি সত্যই গৌণ। লক্ষ্যগুলি সেলেরি থেকে পৃথক স্টোরেজে সংরক্ষণ করা হয়। কোনও অনুরোধ যখন কোনও গণনা সম্পাদনের প্রয়োজন হয় তখন এটি অর্জনের কিছু লক্ষ্যের উপর নির্ভর করে, লক্ষ্যটি ইতিমধ্যে অর্জন হয়েছে কিনা তা যাচাই করে, যদি হ্যাঁ, তবে এটি এই ক্যাশেড লক্ষ্যটি ব্যবহার করে, অন্যথায় এটি লক্ষ্যটি প্রভাবিত করে এমন কাজটি শুরু করে এবং প্রেরণ করে যে ক্লায়েন্ট এইচটিটিপি একটি প্রতিক্রিয়া অনুরোধ করেছে তা নির্দেশ করে যে এটি ফলাফলের জন্য অপেক্ষা করা উচিত।
উপরের পরিবর্তনশীল নাম এবং হাইপারলিঙ্কগুলি সেলারি 4.x এর জন্য are 3.x সংশ্লিষ্ট ভেরিয়েবল এবং হাইপারলিংক আছেন: CELERY_TRACK_STARTED, CELERY_IGNORE_RESULT, CELERY_TASK_RESULT_EXPIRES।
x?