簡體   English   中英

Python金字塔周期性任務

[英]Python Pyramid periodic task

我的問題是如何在Pyramid Python框架中執行一個簡單的任務?

我有一個用戶生日的桌子,我想每天檢查某人是否有生日,如果有,請打印一個簡單的問候語。

所以我在views.py中定義了一些東西:

def print_greetings():
   tomorrow = datetime.date.today()+datetime.timedelta(days=1)
    users = sess.query(User).filter(func.DATE_FORMAT(User.bday, "%d_%m")==tomorrow.strftime("%d_%m")).all()
    if len(users) > 0:
        for u in users:
            print("Happy Birthday", u.name)

所以問題是:我應該如何以及在哪里寫一些東西來執行此功能一天一次?

UPD:我需要從Pyramid應用程序運行任務,像cron這樣的外部工具不是我想要的東西。

也許某種計時器將執行print_greetings()? 執行后會啟動一個新的計時器實例嗎?

雖然Celery對於像這樣的任務來說是一個相當“重量級”的解決方案,但我建議使用APScheduler 您可以像在cron中一樣設置調度程序,但它將在您的應用程序中運行。 在這種情況下,內存中的作業存儲正常工作。

import atexit
from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()
scheduler.start()
scheduler.add_job(print_greetings,
    id='greetings', 
    name='Send out birthday greetings', 
    trigger='cron', 
    minute=0, 
    hour=12,
)

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

有關python解決方案,請查看Celery Beat

對於更簡單的事情,您可以使用計划0 0 * * *創建一個cron作業 這將導致您的腳本每天午夜運行。

您可以創建一個包含Pyramid功能的腳本作為框架的一部分( http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/commandline.html#writing-a-script ); 這將允許您擁有一個獨立的功能,仍然可以訪問您的金字塔螺母和螺栓。 但根據您的更新,它仍然是一個獨立的腳本,需要通過某種任務調度程序進行調度。

除非我遺漏了某些東西,否則Pyramid不會“一直運行”到你可以擁有計時器或排序......你已經有一台服務器提供由金字塔處理的請求。 我猜你可以做一些類似金字塔響應的東西,你可以點擊一個計時器或其他東西,然后只是無限地運行,但這似乎是一種糟糕的事情。 即使是上面的腳本想法 - 您可以執行一次並啟動計時器並使其無限運行,但隨后您將有一個持續運行的進程。

一個更好的解決方案是按照建議將當前幾天的生日寫入表中,然后在視圖中查詢該表以進行顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM