[英]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
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.