Кажется, что пока эта функциональность не реализована в пакете schedule
:
schedule.every(3).monday.do(test)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/schedule/__init__.py", line 302, in monday
raise IntervalError('Use mondays instead of monday')
schedule.IntervalError: Use mondays instead of monday
>>> schedule.every(3).mondays.do(test)
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'Job' object has no attribute 'mondays'
Я бы предложил использовать цикл while True
и вручную проверить, является ли самый день первым понедельником месяца:
from datetime import datetime, date
import calendar
def find_first_monday(now):
month_range = calendar.monthrange(now.year, now.month)
date_corrected = date(now.year, now.month, 1)
delta = (calendar.MONDAY - month_range[0]) % 7
if not delta:
return True
return False
while True:
now = datetime.now()
if first_monday_of_the_month(now):
TestFunction()
time.sleep(24*3600)