ধরুন আমার কাছে একটি মডেল আছে Event। ইভেন্টটি শেষ হয়ে যাওয়ার পরে আমি সমস্ত আমন্ত্রিত ব্যবহারকারীদের কাছে একটি বিজ্ঞপ্তি (ইমেল, পুশ, যা কিছু) প্রেরণ করতে চাই। এর লাইন ধরে কিছু:
class Event(models.Model):
start = models.DateTimeField(...)
end = models.DateTimeField(...)
invited = models.ManyToManyField(model=User)
def onEventElapsed(self):
for user in self.invited:
my_notification_backend.sendMessage(target=user, message="Event has elapsed")
এখন, অবশ্যই, গুরুত্বপূর্ণ অংশটি হ'ল onEventElapsedযখনই প্রার্থনা করা timezone.now() >= event.end। মনে রাখবেন, endবর্তমান তারিখ থেকে কয়েক মাস দূরে থাকতে পারে।
আমি এটি করার দুটি প্রাথমিক উপায় সম্পর্কে ভেবেছি:
একটি পর্যায়ক্রমিক
cronকাজ (বলুন, প্রতি পাঁচ মিনিট বা তার বেশি সময় ধরে) ব্যবহার করুন যা কোন ঘটনাটি পাঁচ মিনিটের মধ্যে শেষ হয়েছে এবং আমার পদ্ধতিটি কার্যকর করে কিনা তা পরীক্ষা করে।ভবিষ্যতে (মডেল পদ্ধতির মধ্যে) চালুর জন্য প্যারামিটারটি ব্যবহার করে
celeryশিডিয়ুল করুন ।onEventElapsedetasave
বিকল্প 1 বিবেচনা করে, একটি সম্ভাব্য সমাধান হতে পারে django-celery-beat। তবে বিজ্ঞপ্তি প্রেরণের জন্য একটি নির্দিষ্ট ব্যবধানে কোনও কাজ চালানো কিছুটা অদ্ভুত বলে মনে হচ্ছে। তদুপরি আমি একটি (সম্ভাব্য) ইস্যু নিয়ে এসেছি যার ফলস্বরূপ (সম্ভবত) না-যেমন মার্জিত সমাধান হবে:
- আগের পাঁচ মিনিটের মধ্যে কেটে যাওয়া ইভেন্টগুলির জন্য প্রতি পাঁচ মিনিটে পরীক্ষা করে দেখুন? নড়বড়ে বলে মনে হচ্ছে, কিছু ইভেন্ট মিস হয়ে গেছে (বা অন্যরা তাদের বিজ্ঞপ্তিগুলি দুবার প্রেরণ করে?)। সম্ভাব্য workaroung:
Trueএকবার বিজ্ঞপ্তি প্রেরণের পরে সেট করা মডেলটিতে একটি বুলিয়ান ক্ষেত্র যুক্ত করুন ।
তারপরে আবার বিকল্প 2 এরও সমস্যা রয়েছে:
- কোনও ইভেন্ট শুরু / শেষ তারিখের সময়টি সরানো হলে ম্যানুয়ালি পরিস্থিতিটির যত্ন নিন। ব্যবহার করার সময়
celery, একজনকেtaskID(সহজ, অফ) সংরক্ষণ করতে হবে এবং তারিখগুলি পরিবর্তিত হয়ে নতুন কাজটি জারি করার পরে টাস্কটি প্রত্যাহার করতে হবে। তবে আমি পড়েছি, ভবিষ্যতে যে কাজগুলি পরিচালনা করা হয় সেগুলি পরিচালনা করার সময় সেই সেলারিটির (নকশা-নির্দিষ্ট) সমস্যা রয়েছে: গিথুব উপর ওপেন ইস্যু । আমি বুঝতে পারি যে এটি কীভাবে ঘটে এবং কেন এটি সমাধান করা তুচ্ছ but
এখন, আমি কয়েকটি লাইব্রেরি নিয়ে এসেছি যা সম্ভবত আমার সমস্যার সমাধান করতে পারে:
- সেলারি_লংটার্ম_শেজুলার (তবে এর অর্থ কি আমি আগে যেমন সেলারি ব্যবহার করতে পারি না, তেমনি আলাদা তফসিলী শ্রেণীর কারণে? এটিও এর সম্ভাব্য ব্যবহারের সাথে জড়িত
django-celery-beat... দুটি ফ্রেমওয়ার্কের মধ্যে কোনওটি ব্যবহার করা কি এখনও চাকরী সারি করা সম্ভব) ( কিছুটা দীর্ঘ সময় চলছে তবে কয়েক মাস দূরে নয়?) - জ্যাঙ্গো-অ্যাপসিডুলার , ব্যবহার
apscheduler। তবে, এটি কীভাবে সুদূর ভবিষ্যতে পরিচালিত কাজগুলি পরিচালনা করবে সে সম্পর্কে কোনও তথ্য খুঁজে পেতে আমি অক্ষম ছিলাম।
আমি যেভাবে এগিয়ে যাচ্ছি তার সাথে কি কোনও তহবিল সংক্রান্ত ত্রুটি রয়েছে? আপনার যে কোনও ইনপুট থাকতে পারে তার জন্য আমি খুশি।
নোটিশ: আমি জানি এটি সম্ভবত কিছুটা মতামত ভিত্তিক হতে পারে তবে যাইহোক, কিছু খুব কুশল বা মার্জিত হিসাবে বিবেচনা না করেই সম্ভবত আমি খুব মিস করেছি যে আমি মিস করেছি।