Сохранить python скрипт планировщика на Windows - PullRequest
0 голосов
/ 24 апреля 2020

Допустим, у меня есть скрипт 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 P C без запуска сценария через мою записную книжку Jupyter, загруженную с помощью Anaconda Navigator?

Приведенное ниже описание кажется неудачным, о чем свидетельствует пустой файл 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: 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

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Допустим, ваш сценарий находится в 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 и добавьте файл .cmd в подменю basic task.

Также вы можете подумать, что вместо использования venv's Python executable вы можете использовать свою Систему Python исполняемый. Но делать это не рекомендуется . Правило гласит: Каждый проект должен иметь свои собственные зависимости и должен запускаться в соответствии со своим собственным virtualenv .

Бонус:

ApScheduler can действовать странно из-за такого поведения:

Если выполнение задания задерживается из-за отсутствия потоков или процессов, доступных в пуле, исполнитель может пропустить его из-за слишком позднего запуска (по сравнению с к его первоначально назначенному времени выполнения). Если это может произойти в вашем приложении, вы можете либо увеличить количество потоков / процессов в исполнителе, либо установить для параметра misfire_grace_time более высокое значение

Для получения дополнительной информации посетите * 1042. * Документация APScheduler

1 голос
/ 24 апреля 2020
  1. Установка Python из python .org
  2. Нажмите Win + X и выберите «Командная строка»
  3. Выполнить pythonw C:\Stuff\Stuff2\EmailScheduler_PPE.py

Понять последствия. Запускайте скрипт, только если вы доверяете библиотекам, которые использовали!

pythonw означает запуск сценария с Python без отображения окна консоли. Вы можете сначала использовать python для отладки. Шаг 3 может ничего не делать визуально, но скрипт должен быть запущен в фоновом режиме.

...