我正在使用 RSS 提要
對于每 x 分鐘,如果其中有任何新內容,我想從 rss 提要向我的資料庫添加內容。我已經撰寫了在資料庫中獲取和更新的代碼,但是如何使該代碼每 X 分鐘運行一次。如果我將這段代碼放在我的一個呈現主頁的視圖函式中,它會減慢頁面加載速度。我希望它每 x 分鐘自動發生一次,而不會影響我的網站功能。
意見.PY
from django.shortcuts import render
from .models import Article,Slide
import feedparser
rss = feedparser.parse('url am passing')
already_updated = False
first_entry = rss.entries[0]
for slide in Slide.objects.all():
if first_entry.title == slide.title:
already_updated = True
if not already_updated:
for entry in rss.entries:
new = Slide(title = entry.title, article_name = Article.objects.last())
new.save()
print(entry['title'])
def test(request):
articles = Article.objects.all()
slides = Slide.objects.all()
return render(request, 'sample/test_amp.html', {'articles':articles, 'slides':slides})
uj5u.com熱心網友回復:
一個簡單的方法是使用APScheduler庫。安裝后,您需要從應用程式的組態檔 (apps.py) 呼叫調度程式以在manage.py runserver命令運行時啟動。一旦 APScheduler 行程以這種方式啟動,它將運行您定義的每個間隔。這是一個作業示例,假設您有一個名為Home.
目錄結構:
Basedir
| - ProjectName
| - Home
| - - __init__.py
| - - admin.py
| - - apps.py
| - - models.py
| - - test.py
| - - views.py
| - - jobs.py
| - - BackgroundClass.py
在您的BackgroundClass.py中,您將定義一個函式,該函式將執行處理部分,您可以在其中獲取 RSS 提要并使用結果更新資料庫。
主頁/BackgroundClass.py
class BackgroundClass:
@staticmethod
def update_db():
# Do your update db from RSS task here
現在,在您的 中jobs.py,您將定義一個函式/類,該函式/類BackgroundScheduler將從 APScheduler 創建一個實體,該實體會在您定義的每個 X 間隔無限期地在后臺運行。使用它,您update_db將從BackgroundClass.
主頁/jobs.py
from apscheduler.schedulers.background import BackgroundScheduler
from .BackgroundClass import BackgroundClass
def start():
scheduler = BackgroundScheduler()
scheduler.add_job(BackgroundClass.update_db, 'interval', minutes=1)
scheduler.start()
現在在 中apps.py,您將在呼叫命令jobs.py時呼叫中定義的函式/類來運行manage.py runserver,因此您的后臺任務從服務器開始,并在服務器運行時一直運行;每 X 間隔執行一次。
主頁/apps.py
from django.apps import AppConfig
class HomeConfig(AppConfig):
name = 'Home'
def ready(self):
import os
from . import jobs
# RUN_MAIN check to avoid running the code twice since manage.py runserver runs 'ready' twice on startup
if os.environ.get('RUN_MAIN', None) != 'true':
jobs.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/422607.html
標籤:
下一篇:SQLiteJOIN麻煩
