91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在django-xadmin中APScheduler啟動初始化的示例分析

發布時間:2021-09-03 10:30:45 來源:億速云 閱讀:88 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關在django-xadmin中APScheduler啟動初始化的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

環境: python3.5.x + django1.9.x + xadmin-for-python3

APScheduler做為一個輕量級和使用量很多的后臺任務計劃(scheduler)包,可以方便的隨系統啟動/關閉而啟動/關閉,如果整合到django中,啟動APScheduler的代碼該寫在哪里好呢,

以下幾個方式供參考:

1. (推薦)自定義Middleware,非常類似Java中的Filter,缺點是要有URL訪問才會觸發啟動,如果系統還沒有啟動完就訪問了URL會觸發__init__多次調用(多次http同時請求造成),可以通過threading的lock同步代碼和狀態限制執行一次

class StartupMiddleware(object):
 def __init__(self):
  #啟動后臺任務APScheduler
  init_scheduler()
 
  from django.core.exceptions import MiddlewareNotUsed
  raise MiddlewareNotUsed #TIP 拋出此異常,則Django將從 middleware 棧中移出該 middleware,請求就不會經過此middleware
 
 def process_request(self, request):
  print("*****enter startup middleware")
scheduler = None
def init_scheduler():
 global scheduler
 lock = threading.Lock() # TIP 多線程同步代碼
 with lock:
  if scheduler and scheduler.running:
   print('*****APScheduler is already started, pid:{}, tid:{}'.format(os.getpid(), threading.current_thread().getName()))
   return scheduler
  executors = {
   'default': ThreadPoolExecutor(5),#線程模式下進程池大小
   'processpool': ProcessPoolExecutor(5),#進程模式下進程池大小
  }
  job_defaults = {
   'coalesce': True, #如果有幾次未執行,條件可以時是否只執行一次
   'max_instances': 1, #同一個job同一時間最多有幾個實例再跑
  }
 
  scheduler = BackgroundScheduler(executors=executors, job_defaults=job_defaults, timezone=timezone(TIME_ZONE))
 
  scheduler.add_job(...)
  scheduler.start()
  return scheduler

2. 應用中的settings.py文件,django在開發環境默認會啟動兩個python進程(對于開發環境還是很實用的,改代碼后會自動重啟),放settings.py中的代碼會被這兩個python進程都調用一次,當然可以通過--reload參數只啟動一個python進程,另外加載settings.py時部分app還未loaded,限制了應用的代碼。

3. 頂層的urls文件, 這個不管你django啟動時是一個進程還是兩個進程,urls文件也只會被加載一次,但存在的缺陷就是在執行makemigrations這樣的命令時,會同樣出現app還未loaded的錯...

感謝各位的閱讀!關于“在django-xadmin中APScheduler啟動初始化的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

通城县| 康乐县| 二连浩特市| 额敏县| 乌拉特中旗| 利津县| 阜宁县| 新昌县| 盱眙县| 循化| 滨州市| 平谷区| 万宁市| 长白| 绥芬河市| 新竹市| 乌兰察布市| 中江县| 清苑县| 淮北市| 铅山县| 金山区| 泰州市| 郎溪县| 乌审旗| 依安县| 乌兰浩特市| 桓台县| 临西县| 土默特左旗| 和顺县| 台江县| 内江市| 五大连池市| 哈尔滨市| 侯马市| 会东县| 孝昌县| 三河市| 陵水| 辽阳县|