簡體   English   中英

保持 python 調度程序腳本在 Windows 上運行

[英]Keep python scheduler script running on Windows

假設我有一個像這樣的 python 腳本:

from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler

sched = BackgroundScheduler()

def SchedulerTest():
    file1 = open("C:/Stuff/Stuff2/SchedTest.txt","a") 
    L = [str(datetime.now()) + ' | Testing this scheduler.' + '\n']
    print(L)
    file1.writelines(L)
    file1.close()

sched.add_job(SchedulerTest, 'interval', seconds=15, start_date="2020-04-24 07:30:00", end_date="2021-01-01 10:59:00", id='id_SchedulerTest')

sched.start()

保存在此目錄中名為 SchedTest.py 的文件中:C:\Stuff\Stuff2\ 以及名為 SchedTest.txt 的空白文本文件

只要我主動加載了筆記本,該過程就可以在我的 Jupyter 筆記本中按預期工作。

如何運行該進程並使其在我的 Windows PC 上運行而不通過我的 Anaconda Navigator 加載的 Jupyter 筆記本運行腳本?

空的 SchedTest.txt 文件證明了以下內容似乎不成功,盡管其中任何一個都沒有彈出錯誤消息:
1. 創建一個名為 SchedTest_start.cmd 的文件,內容如下,然后雙擊它:

echo "Starting my Scheduler Task"
call "C:\ProgramData\Anaconda3\python.exe" "C:\Stuff\Stuff2\SchedTest.py"
pause


2. 打開 cmd 並輸入 python C:\Stuff\Stuff2\SchedTest.py
3. 打開 cmd 並輸入 pythonw C:\Stuff\Stuff2\SchedTest.py
4. 打開 cmd 並輸入 conda run C:\Stuff\Stuff2\SchedTest.py

更新 - - - - - - - - - - - - - - - - - - - - - - - - - -----------------------------------------
將@Chiheb Nexus 的解決方案加上@Alex Grönholm 的評論結合起來工作:
1.更改腳本以使用阻塞調度程序而不是后台調度程序

from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

def SchedulerTest():
    file1 = open("C:/Stuff/Stuff2/bl/SchedTest.txt","a") 
    L = [str(datetime.now()) + ' | Testing this scheduler.' + '\n']
    print(L)
    file1.writelines(L)
    file1.close()

sched.add_job(SchedulerTest, 'interval', seconds=15, start_date="2020-04-24 07:30:00", end_date="2021-01-01 10:59:00", id='id_SchedulerTest')

sched.start()

2. 使用以下內容創建一個名為 SchedTest_start.cmd 的文件,然后加倍-

click it:<br>
echo "Starting my Scheduler Task"
call "C:\ProgramData\Anaconda3\python.exe" "C:\Stuff\Stuff2\SchedTest.py"
pause
  1. python.org 安裝 Python
  2. 按 Win + X 和 select “命令提示符”
  3. 運行pythonw C:\Stuff\Stuff2\EmailScheduler_PPE.py

了解后果。 僅當您信任您使用的庫時才運行腳本!

pythonw表示使用 Python 運行腳本,而不顯示控制台 window。 您可能想先使用python進行調試。 第 3 步可能不會在視覺上做任何事情,但腳本應該在后台啟動。

假設您的腳本位於C:\Users\YOUR_NAME\project中,並且您在項目文件夾下已經有一個virtualenv ( venv )。

換句話說,您的項目文件夾如下所示:

. 

├── project

├── venv

├──  your_script.py

└──  ... (other files)

您需要做的是創建一個.cmd文件,如下例所示:

my_scheduler.cmd

echo "Starting my Scheduler Task"
call "C:\Users\YOUR_NAME\project\venv\Scripts\python.exe" "C:\Users\YOUR_NAME\project\your_script.py"
pause

最后,打開Windows Task Scheduler ,在basic task子菜單下添加.cmd文件。

此外,您可以考慮使用系統 Python 可執行文件,而不是使用venv's Python executable文件。 但不建議這樣做 規則說:每個項目都應該有它自己的依賴項,並且應該在它正確的 virtualenv 下運行

獎金:

由於這種行為, ApScheduler可能會出現奇怪的行為:

如果由於池中沒有可用的線程或進程而導致作業的執行延遲,則執行器可能會因為它運行得太晚而跳過它(與其最初指定的運行時間相比)。 如果這可能發生在您的應用程序中,您可能需要增加執行程序中的線程/進程數,或者將 misfire_grace_time 設置調整為更高的值

有關更多信息,請訪問APScheduler 文檔

暫無
暫無

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

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