একটি নির্ধারিত কাজ সেট আপ?


518

আমি জ্যাঙ্গো ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশনটিতে কাজ করছি এবং আমি যদি জানতে আগ্রহী যে যদি কোনও কাজ সময় সময় চালানোর সময়সূচী করার উপায় থাকে।

মূলত আমি কেবল ডাটাবেসটির মধ্য দিয়ে চলতে এবং একটি স্বয়ংক্রিয়, নিয়মিত ভিত্তিতে কিছু গণনা / আপডেট করতে চাই, তবে আমি এটি করার কোনও ডকুমেন্টেশন খুঁজে পাচ্ছি না।

কেউ কীভাবে এটি সেট আপ করতে জানেন?

স্পষ্ট করার জন্য: আমি জানি আমি এটি করার জন্য একটি cronচাকরী সেট করতে পারি, তবে আমি জানি যদি জ্যাঙ্গোর কোনও বৈশিষ্ট্য থাকে যা এই কার্যকারিতাটি সরবরাহ করে। আমি চাই লোকেরা খুব বেশি কনফিগার না করেই এই অ্যাপ্লিকেশনটি নিজেরাই স্থাপন করতে সক্ষম হয় (পছন্দসই শূন্য)।

আমি শেষ মুহূর্তে সাইটে অনুরোধ প্রেরিত হওয়ার পরে কোনও কাজ চালিত হওয়া উচিত ছিল কিনা তা খতিয়ে পরীক্ষা করে এই ক্রিয়াগুলি "প্রত্যাবর্তনমূলকভাবে" ট্রিগার করার বিষয়টি বিবেচনা করেছি, তবে আমি কিছুটা পরিষ্কার করার আশা করছি।


1
আপনি যদি একটি উচ্চ-পারফরম্যান্সের সাইট এবং ইতিমধ্যে রবিট এমকিউ ব্যবহার করে এখানে ক্রোন ঘুরে দেখার কৌশল: ক্রোন-এর মতো সময়সূচী করতে AMQP ব্যবহার করে
ভ্যান গাল

আমি যদি সঠিকভাবে বুঝতে পারি তবে জ্যাঙ্গোতে আপনাকে কিছু কাজ শিডিউল করা দরকার। আমি আজকাল সবচেয়ে ভাল জিনিসটি খুঁজে পাই এটি হল: সেলারি.github.com/celery/index.html
আলী নিকনেশান

আপনি এই কি মনে করেন? github.com/reavis/django-cron
ডোমেনিকো মোনাকো

টিকটি হ'ল কেবল আপনাকে এই সমস্ত কাজ এড়াতে। [অস্বীকৃতি] আমি টিক তৈরি করি।
সিসিয়া

2
github.com/coleifer/huey হুয়ের এখানে একটি উল্লেখ দরকার। জ্যাঙ্গোর সাথে সেটআপ করা হাস্যকরভাবে সহজ।
ব্র্যান্ডন বার্টেলসেন

উত্তর:


362

আমি নিযুক্ত একটি সমাধান হ'ল এটি করা:

1) একটি কাস্টম পরিচালনা কমান্ড তৈরি করুন , যেমন

python manage.py my_cool_command

2) ব্যবহার করুন cronat প্রয়োজনীয় সময়ে আমার কমান্ড চালানোর জন্য ( লিনাক্সে) বা (উইন্ডোজে ।

এটি একটি সহজ সমাধান যা ভারী এএমকিউপি স্ট্যাক ইনস্টল করার প্রয়োজন হয় না। তবে অন্যান্য উত্তরে উল্লিখিত সিলারি জাতীয় কিছু ব্যবহারের দুর্দান্ত সুবিধা রয়েছে। বিশেষত, সেলারি দিয়ে আপনার অ্যাপ্লিকেশন যুক্তিটি ক্রন্টব ফাইলগুলিতে ছড়িয়ে না দেওয়া ভাল। তবে ক্রোন সলিউশনটি একটি ছোট থেকে মাঝারি আকারের অ্যাপ্লিকেশনটির জন্য বেশ সুন্দরভাবে কাজ করে এবং যেখানে আপনি অনেকগুলি বাহ্যিক নির্ভরতা চান না।

সম্পাদনা করুন:

উইন্ডোজগুলির পরবর্তী সংস্করণে atকমান্ডটি উইন্ডোজ 8, সার্ভার 2012 এবং তারপরের জন্য অবচিত করা হয়েছে। আপনি schtasks.exeএকই ব্যবহারের জন্য ব্যবহার করতে পারেন।

**** আপডেট **** এটি কাস্টম ম্যানেজমেন্ট কমান্ড লেখার জন্য জাঙ্গো ডকের নতুন লিঙ্ক


4
বাহ্যিক পরিষেবাদি ব্যতীত এটি করার উপায় কি কেবল চালানো জ্যাঙ্গো ফ্রেমওয়ার্ক প্রক্রিয়া ব্যবহার করে?
sergzach

4
@ ব্রায়ান_নিলে জ্যাঙ্গো_ক্রোন অ্যাপ্লিকেশন।
sergzach

2
দয়া করে আমাকে বুঝতে সাহায্য করুন যে আমি কীভাবে প্রতি মাসের শেষ দিনে ক্রোন ব্যবহার করে ভার্চুয়াল পরিবেশে পরিচালনা কমান্ড চালাব।
mmrs151

2
@sergzach আমি এই মন্তব্যটি অনুসরণ করেছি এবং দেখা যাচ্ছে যে এই নামে দুটি প্যাকেজ রয়েছে। Google Code- এ জ্যাঙ্গো-ক্রন এবং GitHub থেকে জ্যাঙ্গো-ক্রন । এগুলি কিছুটা আলাদা তবে আকর্ষণীয়। উভয়ই আপনাকে 'জ্যাঙ্গোনিক' উপায়ে crons সংজ্ঞায়িত করতে দেয়। প্রথমটিটি কিছুটা বড় এবং কোনও বাহ্যিক কাজ (অর্থাত ক্রোন) ছাড়াই কাজ করার লক্ষ্য। অন্যদিকে দ্বিতীয়টির জন্য আপনাকে চালনার জন্য ক্রোন সেট করতে হবে python manage.py runcronsযা আপনার সংজ্ঞায়িত এবং নিবন্ধীকৃত সমস্ত ক্রোন চালায়।
ড্রিফ্যাচ্যাচার

1
@sergzach আমি ধরে নিচ্ছি যে আপনি প্রথমটি "গুগল কোডে জাঙ্গো-ক্রোন" উল্লেখ করছেন। আপনি যে সম্পর্কে ঠিক বলেছেন। এই কারণেই আমি দ্বিতীয়টির জন্য বেছে নিই, "গিটহাবের উপর জ্যাঙ্গো-ক্রোন", কারণ এটি আপনাকে সহজ ক্রন্টব সেটআপ / পরিচালনা করে তোলে - কেবলমাত্র একটি ক্রন্টাব, পরিচালনা আদেশকে উল্লেখ করে - তবে যেহেতু আপনি আলাদা ব্যবহার করছেন ক্রোন প্রক্রিয়া আপনি এই সিঙ্ক্রোনাইজেশন সমস্যাটি এড়িয়ে চলুন (আমি যতদূর বলতে পারি)।
ড্রিফ্যাচ্যাচার

151

সেলারি হ'ল একটি বিতরণ করা টাস্ক কিউ, এটি এএমকিউপি (রাবিটএমকিউ) এ নির্মিত। এটি ক্রোন-জাতীয় ফ্যাশনে পর্যায়ক্রমিক কাজগুলি পরিচালনা করে ( পর্যায়ক্রমিক কার্যগুলি দেখুন) )। আপনার অ্যাপ্লিকেশন উপর নির্ভর করে, এটি একটি গ্যান্ডার মূল্য হতে পারে।

সেলারিটি জ্যাঙ্গো ( ডক্স ) দিয়ে সেট আপ করা বেশ সহজ এবং পর্যায়ক্রমিক কার্যগুলি ডাউনটাইমের ক্ষেত্রে মিসড কার্যগুলি বাদ দেয়। কোনও কাজ ব্যর্থ হলে সেলারিতে বিল্ট-ইন পুনরায় চেষ্টা করার পদ্ধতিও রয়েছে।


51

আমি মনে করি যা আমরা স্ট্রাকচার্ড অ্যাপ হিসাবে খোলামেলা করেছি। ব্রায়ান এর সমাধানও খুব উপরে দেখায়। আমরা কোনও / সমস্ত প্রতিক্রিয়া পছন্দ করব!

https://github.com/tivix/django-cron

এটি একটি পরিচালনা কমান্ড সহ আসে:

./manage.py runcrons

এটা কাজ করে। প্রতিটি ক্রোনকে একটি শ্রেণি হিসাবে মডেল করা হয় (সুতরাং এর সমস্ত ওও) এবং প্রতিটি ক্রোন আলাদা ফ্রিকোয়েন্সিতে চলে এবং আমরা নিশ্চিত করি যে একই ক্রোন প্রকার সমান্তরালে চলবে না (যদি ক্রোনগুলি তাদের ফ্রিকোয়েন্সি থেকে চালাতে বেশি সময় নেয়!)


5
@ চাচরা দুঃখিত, আমি জানি এটি একটি বোবা প্রশ্ন হতে পারে, তবে উইন্ডোজের মাধ্যমে atএটি কাজ করবে বা এটি বিশেষত ডিজাইনের সাথে কাজ করার জন্য ছিল cron?
ব্রুনো ফিঙ্গার

38

আপনি যদি কোনও স্ট্যান্ডার্ড পসিক্স ওএস ব্যবহার করেন তবে আপনি ক্রোন ব্যবহার করেন

আপনি যদি উইন্ডোজ ব্যবহার করেন তবে আপনি এটি ব্যবহার করুন

একটি জ্যাঙ্গো পরিচালনা কমান্ড লিখুন

  1. তারা কী প্ল্যাটফর্মে রয়েছে তা নির্ধারণ করুন।

  2. হয় আপনার ব্যবহারকারীদের জন্য উপযুক্ত "এটি" কমান্ড কার্যকর করুন, বা আপনার ব্যবহারকারীদের জন্য ক্রোনট্যাব আপডেট করুন।


10
আমি যদি সম্ভব হয় তবে এটি আমার জ্যাঙ্গো অ্যাপে রোলড আপ করতে চাই have
টিএম

@ টিএম: "আমার জাঙ্গো অ্যাপে রোলড আপ" বলতে কী বোঝায়? আপনার প্রশ্নটি পরিষ্কার করুন।
এস .লট

10
আমি চাই যে লোকেরা ক্রোন জবগুলি নিজেরাই সেটআপ না করেই সহজেই এই অ্যাপটি স্থাপন করতে সক্ষম হয়।
টিএম

1
আপনি সর্বদা আপনার অ্যাপ্লিকেশনটিতে ক্রোন ইন্টারফেসটি মোড়ানো করতে পারেন।
monkut

বিএসডি, ম্যাক এবং ইউনিক্সের মতো কোনও ওএসের ক্রোন রয়েছে।
ডিলানইং

23

আকর্ষণীয় নতুন প্লাগেবল জাজানো অ্যাপ্লিকেশন: জাজানো-ক্রোনোগ্রাফ

আপনাকে কেবলমাত্র একটি ক্রোন এন্ট্রি যুক্ত করতে হবে যা টাইমার হিসাবে কাজ করে এবং স্ক্রিপ্টগুলিতে চালনার জন্য আপনার খুব সুন্দর জ্যাঙ্গো অ্যাডমিন ইন্টারফেস রয়েছে।


2
জ্যাঙ্গো-কালানোগ্রাফটি অনিচ্ছাকৃত। এটা তোলে এর কাঁটাচামচ অনেক ভালো করছে: github.com/chrisspen/django-chroniker
Menda

16

জ্যাঙ্গো দরিদ্র মনের ক্রোন দেখুন যা একটি জ্যাঙ্গো অ্যাপ্লিকেশন যা প্রায় নিয়মিত বিরতিতে নির্ধারিত কাজগুলি চালানোর জন্য স্প্যামবটস, সার্চ ইঞ্জিন সূচক রোবট এবং একইভাবে ব্যবহার করে makes

দেখুন: http://code.google.com/p/django-poormanscron/


2
এটি এও ধরে নেয় যে আপনার জাজানো অ্যাপটি ওয়েব থেকে অ্যাক্সেসযোগ্য, যা ল্যান এবং ভিপিএনগুলিতে মোতায়েনের ক্ষেত্রে হবে না।
টিএমএইচ -

9

ক্রন মাধ্যমে ব্যবস্থাপনা কমান্ড চলমান ব্রায়ান নীল এর পরামর্শ ভাল কাজ করে, কিন্তু আপনি একটু আরো জোরালো খুঁজছেন (এখনও যেমন সেলারি যেমন সম্প্রসারিত নয়) আমি একটি লাইব্রেরি দেখব চাই Kronos :

# app/cron.py

import kronos

@kronos.register('0 * * * *')
def task():
    pass

9

রাব্বিটএমকিউ এবং সেলারিটিতে ক্রনের চেয়ে আরও বেশি বৈশিষ্ট্য এবং টাস্ক হ্যান্ডলিং ক্ষমতা রয়েছে। যদি টাস্ক ব্যর্থতা কোনও সমস্যা না হয়ে থাকে এবং আপনি মনে করেন যে আপনি পরবর্তী কলগুলিতে ভাঙ্গা কাজগুলি পরিচালনা করবেন তবে ক্রোন যথেষ্ট।

সেলারি এবং এএমকিউপি আপনাকে এই ভাঙ্গা কাজটি পরিচালনা করতে দেবে এবং টাস্কটিরmax_retries বৈশিষ্ট্য না পৌঁছানো পর্যন্ত এটি অন্য শ্রমিক দ্বারা চালানো হবে (সেলারি কর্মীরা কাজ করার জন্য পরবর্তী কাজটি শোনেন) । এমনকি ব্যর্থতার উপর যেমন ব্যর্থতা লগ করা বা অ্যাডমিনকে একবার ইমেল প্রেরণ করা শেষ হয়ে যায় তখন আপনি কাজ করতে পারেন max_retries

যখন আপনার অ্যাপ্লিকেশনটি স্কেল করা দরকার তখন আপনি সেলারি এবং এএমকিউপি সার্ভার বিতরণ করতে পারেন।


9

কিছুক্ষণ আগে আমার ঠিক একই প্রয়োজন ছিল এবং এপিএসকিউলার ( ব্যবহারকারী গাইড ) ব্যবহার করে এটি সমাধান করা শেষ হয়েছিল

এটি শিডিংয়ের কাজগুলিকে অত্যন্ত সহজ করে তোলে এবং কিছু কোডের অনুরোধ ভিত্তিক সম্পাদন থেকে এটি আলাদা রাখে। নিম্নলিখিত একটি সহজ উদাহরণ।

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()
job = None

def tick():
    print('One tick!')\

def start_job():
    global job
    job = scheduler.add_job(tick, 'interval', seconds=3600)
    try:
        scheduler.start()
    except:
        pass

আশা করি এটি কারও সাহায্য করবে!


8

আমি ব্যক্তিগতভাবে ক্রন ব্যবহার করেন, কিন্তু চাকরি পূর্বপরিকল্পনা অংশগুলি জ্যাঙ্গো এক্সটেনশানসমূহ দেখতে ভালই লাগছে।


এখনও ট্রিগার করার জন্য ক্রোন উপর নির্ভর করে, এর মধ্যে আরও একটি বিমূর্ত স্তর যুক্ত করুন। ব্যক্তিগতভাবে এটি মূল্যবান তা নিশ্চিত নয়।
কার্ল মায়ার

আমি সম্মত, এবং এ সম্পর্কে চিন্তাভাবনা করার পরেও আমি চাই না যে মিডলওয়্যারের অনুরোধ আমার সাইটটি (ধীরে ধীরে উপরে) যখন ক্রোন যেভাবে আরও ভালভাবে কাজটি করতে পারে তা কমিয়ে দেবে।
ভ্যান গালে

7

যদিও জ্যাঙ্গোর অংশ নয়, এয়ারফ্লো একটি সাম্প্রতিক প্রকল্প ( 2016 হিসাবে) যা কার্য পরিচালনার জন্য কার্যকর।

এয়ারফ্লো হ'ল একটি ওয়ার্কফ্লো অটোমেশন এবং শিডিয়ুলিং সিস্টেম যা ডেটা পাইপলাইনগুলি লেখক এবং পরিচালনা করতে ব্যবহৃত হতে পারে। একটি ওয়েব-ভিত্তিক ইউআই এই পাইপলাইনগুলি পরিচালনা ও দেখার জন্য বিকাশকারীকে বিভিন্ন বিকল্প সরবরাহ করে।

এয়ারফ্লোটি পাইথনে লেখা এবং এটি ফ্লাস্ক ব্যবহার করে নির্মিত হয়েছিল।

Airflow Airbnb এর এ ম্যাক্সিম Beauchemin দ্বারা তৈরি করা হয়েছে এবং খোলা 2015. বসন্তে sourced এটা 2016. সালের শীতে এ্যাপাচি সফটওয়্যার ফাউন্ডেশনের সুপ্তাবস্থা প্রোগ্রাম যোগদান এখানে গীত প্রকল্পের পৃষ্ঠা এবং কিছু উপরন্তু পটভূমির তথ্য


6

নিম্নলিখিতটি আপনার ক্রোন.পি ফাইলের শীর্ষে রাখুন:

#!/usr/bin/python
import os, sys
sys.path.append('/path/to/') # the parent directory of the project
sys.path.append('/path/to/project') # these lines only needed if not on path
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproj.settings'

# imports and code below

6

আমি কেবল এই বরং সহজ সমাধান সম্পর্কে চিন্তা করেছি:

  1. ইউআরএল ম্যাপিংয়ের সাথে আপনি যেমন অন্য কোনও দৃশ্যের সাথে একটি ভিটি ফাংশন (রেক, প্যারাম) সংজ্ঞায়িত করেন , কোনও HTTPResponse ফিরিয়ে দিন।
  2. আপনার টাইমিং পছন্দগুলি (বা উইন্ডোজে এটি বা শিডিউড টাস্ক ব্যবহার করে) এর সাথে ক্রোন জব সেট আপ করুন যা কার্ল চালায় http: // লোকালহস্ট / আপনার / ম্যাপড / ইউআরএল? পরম = মান

আপনি প্যারামিটারগুলি যুক্ত করতে পারেন তবে কেবলমাত্র ইউআরএলে পরামিতি যুক্ত করতে পারেন।

তোমরা কি ভাব আমাকে বল।

[আপডেট] আমি এখন কার্লের পরিবর্তে জ্যাঙ্গো -এক্সটেনশনগুলি থেকে রানজব কমান্ডটি ব্যবহার করছি ।

আমার ক্রোন দেখতে কিছুটা এমন দেখাচ্ছে:

@hourly python /path/to/project/manage.py runjobs hourly

... এবং প্রতিদিন, মাসিক ইত্যাদির জন্য '। আপনি একটি নির্দিষ্ট কাজ চালানোর জন্য এটি সেট আপ করতে পারেন।

আমি এটি আরও পরিচালিত এবং একটি ক্লিনার খুঁজে পাই। একটি ভিউতে কোনও ইউআরএল ম্যাপিংয়ের প্রয়োজন হয় না। কেবলমাত্র আপনার কাজের শ্রেণি এবং ক্রন্টব সংজ্ঞা দিন এবং আপনি সেট হয়ে গেছেন।


1
কেবলমাত্র সংবেদনশীল সমস্যা হ'ল অনাবশ্যকভাবে অ্যাপ্লিকেশনে লোড যুক্ত করা এবং ব্যান্ডউইথ কেবল একটি পটভূমি কাজ চালানোর জন্য যা আরও ভালভাবে "অভ্যন্তরীণভাবে" চালু করা হবে এবং পরিবেশক অ্যাপ্লিকেশনটি থেকে আলাদা হবে। তবে এগুলি ছাড়াও এটি একটি চালাক এন আরও জেনেরিক জ্যাঙ্গো-ক্রোন কারণ এটি এমনকি অ্যাপ্লিকেশনটির সার্ভারের বাহ্যিক এজেন্টদের দ্বারা আবেদন করা যেতে পারে!
nemesisfixx

আপনি ঠিক বলেছেন, এজন্য আমি জ্যাঙ্গো-কমান্ড-এক্সটেনশানগুলি থেকে চাকরীগুলি ব্যবহার করতে চলে এসেছি। আমার উত্তরে আমার আপডেট দেখুন।
মাইকেল 21

4

কোডের অংশের পরে, আমি আমার ভিউএসপি এর মতো কিছু লিখতে পারি :)

#######################################
import os,sys
sys.path.append('/home/administrator/development/store')
os.environ['DJANGO_SETTINGS_MODULE']='store.settings'
from django.core.management impor setup_environ
from store import settings
setup_environ(settings)
#######################################

http://www.cotellese.net/2007/09/27/running-ternally-scriptts-against-django-models/ থেকে


3

আপনার অবশ্যই জ্যাঙ্গো-কি পরীক্ষা করা উচিত! এটির জন্য কোনও অতিরিক্ত কনফিগারেশন প্রয়োজন নেই এবং বাণিজ্যিক প্রকল্পগুলিতে কোনও উত্পাদন সমস্যা হ্যান্ডেল করার জন্য যথেষ্ট পরিমাণে প্রয়োজনীয় সবকিছু রয়েছে।

এটি সক্রিয়ভাবে জঞ্জো, জাঙ্গো ওআরএম, মঙ্গো, রেডিসের সাথে সক্রিয়ভাবে বিকাশিত এবং সংহত হয়েছে। এখানে আমার কনফিগারেশন:

# django-q
# -------------------------------------------------------------------------
# See: http://django-q.readthedocs.io/en/latest/configure.html
Q_CLUSTER = {
    # Match recommended settings from docs.
    'name': 'DjangoORM',
    'workers': 4,
    'queue_limit': 50,
    'bulk': 10,
    'orm': 'default',

# Custom Settings
# ---------------
# Limit the amount of successful tasks saved to Django.
'save_limit': 10000,

# See https://github.com/Koed00/django-q/issues/110.
'catch_up': False,

# Number of seconds a worker can spend on a task before it's terminated.
'timeout': 60 * 5,

# Number of seconds a broker will wait for a cluster to finish a task before presenting it again. This needs to be
# longer than `timeout`, otherwise the same task will be processed multiple times.
'retry': 60 * 6,

# Whether to force all async() calls to be run with sync=True (making them synchronous).
'sync': False,

# Redirect worker exceptions directly to Sentry error reporter.
'error_reporter': {
    'sentry': RAVEN_CONFIG,
},
}

3

শিডিয়ুলার জবসের জন্য জ্যাঙ্গো এপিএসকেলেডার। অ্যাডভান্সড পাইথন সিডিউলার (এপিএসচেডুলার) একটি পাইথন গ্রন্থাগার যা আপনাকে একবারে বা পর্যায়ক্রমে পাইথন কোডটি পরে মৃত্যুদন্ড কার্যকর করার সময়সূচী দেয়। আপনি যেমন খুশি তে নতুন চাকরী যুক্ত করতে বা পুরানোগুলিকে সরাতে পারেন।

দ্রষ্টব্য: আমি এই গ্রন্থাগারের লেখক

APScheduler ইনস্টল করুন

pip install apscheduler

কল করতে ফাইল ফাংশন দেখুন

ফাইলের নাম: সময়সূচক_জবস.পি

def FirstCronTest():
    print("")
    print("I am executed..!")

সিডিউলার কনফিগার করা হচ্ছে

এক্সিকিউটি.পি ফাইল তৈরি করুন এবং নীচের কোডগুলি যুক্ত করুন

from apscheduler.schedulers.background import BackgroundScheduler
scheduler = BackgroundScheduler()

আপনার লিখিত ফাংশন এখানে, শিডিয়ুলার ফাংশনগুলি শিডিউলার_জবসগুলিতে লেখা হয়

import scheduler_jobs 

scheduler.add_job(scheduler_jobs.FirstCronTest, 'interval', seconds=10)
scheduler.start()

ফাঁসির জন্য ফাইলটি লিঙ্ক করুন

এখন, url ফাইলের নীচে নীচের লাইনটি যুক্ত করুন

import execute
  • আপনি কার্যকর করে পুরো কোডটি চেক করতে পারেন [এখানে ক্লিক করুন] https://github.com/dev Chandansh/django- apscheduler

2

আপনার সমস্যাটির সাথে আমার আজও তেমন কিছু ছিল।

আমি এটি সার্ভার ট্রহফ ক্রোন দ্বারা পরিচালিত করতে চাইনি (এবং বেশিরভাগ লিবগুলি শেষ পর্যন্ত ক্রোন সহায়ক ছিল)।

সুতরাং আমি একটি সময়সূচী মডিউল তৈরি করেছি এবং এটি দীক্ষায় সংযুক্ত করেছি ।

এটি সর্বোত্তম পদ্ধতির নয়, তবে এটি আমাকে সমস্ত কোড একক স্থানে রাখতে এবং মূল অ্যাপ্লিকেশনটির সাথে এর কার্য সম্পাদন করতে সহায়তা করে।


2

হ্যাঁ, উপরের পদ্ধতিটি দুর্দান্ত। এবং আমি তাদের কিছু চেষ্টা করেছিলাম। শেষ অবধি, আমি এর মতো একটি পদ্ধতি পেয়েছি:

    from threading import Timer

    def sync():

        do something...

        sync_timer = Timer(self.interval, sync, ())
        sync_timer.start()

ঠিক পুনরাবৃত্তির মতো ।

ঠিক আছে, আমি আশা করি এই পদ্ধতিটি আপনার প্রয়োজনীয়তা পূরণ করতে পারে। :)


1
যদি আপনার 'কিছু' কখনই ব্যর্থ হয় তবে থামবে, সুতরাং নিশ্চিত হয়ে নিন যে আপনি এর মধ্যে সমস্ত ব্যতিক্রম হ্যান্ডেল করেছেন। তারপরেও ওয়েব সার্ভারটি হয়ত আপনার থ্রেডটি কোনও কোনও সময় মেরে ফেলবে, তা না?
লুটজ প্রেশেল্ট

2

আরও আধুনিক সমাধান (সিলারির তুলনায়) হ'ল জ্যাঙ্গো কিউ: https://django-q.readthedocs.io/en/latest/index.html

এটির দুর্দান্ত ডকুমেন্টেশন রয়েছে এবং এটি আঁকাবাঁকা করা সহজ। উইন্ডোজ সমর্থন অভাব, কারণ উইন্ডোজ প্রক্রিয়া কাঁটাচামচ সমর্থন করে না। তবে লিনাক্স সাবসিস্টেমের জন্য উইন্ডোজ ব্যবহার করে যদি আপনি আপনার ডেভ পরিবেশ তৈরি করেন তবে এটি কাজ করে।


দেখে মনে হচ্ছে আপনি এখনও এটি উইন্ডোজের একক-ক্লাস্টার মোডে ব্যবহার করতে পারবেন
Yushin Washio

1

আমি আমার পর্যায়ক্রমিক কাজগুলি তৈরি করতে সেলারি ব্যবহার করি। প্রথমে আপনাকে এটি নীচে ইনস্টল করতে হবে:

pip install django-celery

django-celeryআপনার সেটিংসে নিবন্ধন করতে ভুলবেন না এবং তারপরে আপনি এরকম কিছু করতে পারেন:

from celery import task
from celery.decorators import periodic_task
from celery.task.schedules import crontab
from celery.utils.log import get_task_logger
@periodic_task(run_every=crontab(minute="0", hour="23"))
def do_every_midnight():
 #your code

2
আমি লক্ষ্য করেছি যে এই পরামর্শটি পুরানো এবং আপনি সরাসরি সেলারি সংহত করতে পারেন। বিশদ জানতে pypi.python.org/pypi/django- স্টিলারি দেখুন ।
পিটার ব্রিটেন

সেলারি ডক্স বলছে যে এটি v3.1-এ পরিবর্তিত হয়েছিল। আমি নিজে চেষ্টা করে দেখিনি এখনও।
পিটার ব্রিটেন

1

আমি নিশ্চিত না যে এটি কারও পক্ষে কার্যকর হবে, যেহেতু আমাকে সিস্টেমের অন্যান্য ব্যবহারকারীদের চাকরীর সময়সূচী দেওয়ার জন্য, প্রকৃত সার্ভার (উইন্ডোজ) টাস্ক শিডিয়ুলারে অ্যাক্সেস না দিয়েই এই পুনরায় ব্যবহারযোগ্য অ্যাপ্লিকেশনটি তৈরি করেছিলাম।

দয়া করে নোট করুন যে ব্যবহারকারীদের সার্ভারে একটি ভাগ করা ফোল্ডারে অ্যাক্সেস রয়েছে যেখানে তারা প্রয়োজনীয় কমান্ড / টাস্ক / .bat ফাইল তৈরি করতে পারে। এই কাজটি এই অ্যাপ্লিকেশনটি ব্যবহার করে নির্ধারিত হতে পারে।

অ্যাপের নাম জ্যাঙ্গো_উইন্ডো_সেকুলার

স্ক্রীনশট: এখানে চিত্র বর্ণনা লিখুন


0

আপনি আরো কিছু চান নির্ভরযোগ্য চেয়ে সেলারি , চেষ্টা TaskHawk যার উপর নির্মিত হয় ডেস্কটপ AWS SQS / এসএনএস

তথ্যসূত্র: http://taskhawk.readthedocs.io


0

সাধারণ ডকারাইজড প্রকল্পগুলির জন্য, আমি সত্যিই কোনও বিদ্যমান উত্তর ফিট করতে পারি না।

সুতরাং আমি বাহ্যিক লাইব্রেরি বা ট্রিগারগুলির প্রয়োজন ছাড়াই একটি খুব ব্রেইনবোনস সমাধান লিখেছি, যা এটি নিজেই চলে। কোনও বাহ্যিক ওস ক্রোন দরকার নেই, প্রতিটি পরিবেশে কাজ করা উচিত।

এটি মিডলওয়্যার যুক্ত করে কাজ করে: middleware.py

import threading

def should_run(name, seconds_interval):
    from application.models import CronJob
    from django.utils.timezone import now

    try:
        c = CronJob.objects.get(name=name)
    except CronJob.DoesNotExist:
        CronJob(name=name, last_ran=now()).save()
        return True

    if (now() - c.last_ran).total_seconds() >= seconds_interval:
        c.last_ran = now()
        c.save()
        return True

    return False


class CronTask:
    def __init__(self, name, seconds_interval, function):
        self.name = name
        self.seconds_interval = seconds_interval
        self.function = function


def cron_worker(*_):
    if not should_run("main", 60):
        return

    # customize this part:
    from application.models import Event
    tasks = [
        CronTask("events", 60 * 30, Event.clean_stale_objects),
        # ...
    ]

    for task in tasks:
        if should_run(task.name, task.seconds_interval):
            task.function()


def cron_middleware(get_response):

    def middleware(request):
        response = get_response(request)
        threading.Thread(target=cron_worker).start()
        return response

    return middleware

models/cron.py:

from django.db import models


class CronJob(models.Model):
    name = models.CharField(max_length=10, primary_key=True)
    last_ran = models.DateTimeField()

settings.py:

MIDDLEWARE = [
    ...
    'application.middleware.cron_middleware',
    ...
]

0

সহজ উপায় হ'ল একটি কাস্টম শেল কমান্ড লেখার জন্য জ্যাঙ্গো ডকুমেন্টেশন দেখুন এবং এটি লিনাক্সে ক্রোনজব ব্যবহার করে চালিত করুন। তবে আমি সেলিব্রিটির সাথে মিলিয়ে র‌্যাবিট এমকিউয়ের মতো বার্তা ব্রোকারটি ব্যবহার করার সুপারিশ করব। সম্ভবত আপনি এই টিউটোরিয়ালটি একবার দেখতে পারেন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.