اذهب إلى المحتوى

السؤال

نشر

لدي مشروع فلاسك Flask وأريد أن أقوم بتنفيذ دالة معينة في وقت محدد عندما يقوم المستخدم بالدخول إلى مسار ما، على سبيل المثال:

import time
from flask import Flask, request, render_template
app = Flask(__name__)


def date_time():
    print("Working at: ", time.strftime("%A, %d. %B %Y %I:%M:%S %p"))

@app.route('/', methods=['POST', 'GET'])
def index():
    # Execute date_time() after 1 hour
    return render_template("home.html")


if __name__ == '__main__':
    app.run(debug=True)

أريد تنفيذ الدالة date_time كل ساعة من لحظة دخول المستخدم إلى المسار / ، حاولت أن أستخدم corn ولكن لم أستطع أن أقوم بذلك من خلال كود Python.

هل توجد طريقة للقيام بهذا الأمر في فلاسك Flask؟

Recommended Posts

  • 1
نشر

يمكنك القيام بهذا الأمر من خلال إستخدام التابع BackgroundScheduler الموجود في الحزمة  APScheduler والتي تسمح لك بتنفيذ دالة معينة كل فترة من الزمن مثل ما يقوم به corn بالضبط.
أولًا عليك تثبيت الحزمة من خلال الأمر التالي:

pip install APScheduler

ثم يمكنك أن تقوم بإستخدامها على النحو التالي:

import time
import atexit
from flask import Flask, request, render_template
from apscheduler.schedulers.background import BackgroundScheduler

app = Flask(__name__)
scheduler = BackgroundScheduler()

def date_time():
    print("Working at: ", time.strftime("%A, %d. %B %Y %I:%M:%S %p"))


@app.route('/', methods=['POST', 'GET'])
def index():
    scheduler.add_job(func=date_time, trigger="interval", seconds=3600)
    scheduler.start()
    
    return render_template("home.html")

if __name__ == '__main__':
    app.run(debug=True)

كما يمكنك أن تقوم بإيقاف كل العمليات التي تعمل في الخلفية من خلال إستخدام التابع register:

atexit.register(lambda: scheduler.shutdown())

ويمكنك أن تضيف الكود السابق في مسار مختلف ليتم إيقاف العمليات عند زيارته:

@app.route('/shutdown')
def shutdown():
    atexit.register(lambda: scheduler.shutdown())
    return "closed"

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...