|
""" |
|
https://github.com/agronholm/apscheduler/blob/3.x/examples/schedulers/asyncio_.py |
|
""" |
|
import asyncio |
|
import threading |
|
import time |
|
import pytz |
|
|
|
from datetime import datetime |
|
from apscheduler.schedulers.background import BackgroundScheduler |
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler |
|
from loguru import logger |
|
|
|
from _playwright.bilibili import bilibili_sign, bilibili_live |
|
from _playwright.v2ex import v2ex_sign |
|
from _playwright.vits import vits_sign |
|
from _playwright.tsdm import tsdm_sign |
|
from _playwright.wuaipojie import wuaipojie_sign |
|
from _requests.aliyundrive import aliyundrive_sign, validate_access_token |
|
|
|
|
|
def tick(): |
|
logger.debug(f"Tick! The time is: {datetime.now():%Y-%m-%d %H:%M:%S}") |
|
|
|
|
|
def run_scheduler(loop): |
|
asyncio.set_event_loop(loop) |
|
|
|
task = AsyncIOScheduler() |
|
task.configure(timezone=pytz.timezone("Asia/Shanghai")) |
|
task.add_job(tick, "cron", hour="*/2", next_run_time=datetime.now(), coalesce=True) |
|
task.add_job( |
|
bilibili_sign, |
|
"cron", |
|
hour=0, |
|
minute=1, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
bilibili_live, |
|
"cron", |
|
hour=5, |
|
minute=1, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
v2ex_sign, |
|
"cron", |
|
hour=0, |
|
minute=2, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
tsdm_sign, |
|
"cron", |
|
hour=12, |
|
minute=3, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
wuaipojie_sign, |
|
"cron", |
|
hour=12, |
|
minute=4, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
vits_sign, |
|
"cron", |
|
hour="0, 12", |
|
minute=6, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
aliyundrive_sign, |
|
"cron", |
|
hour=12, |
|
minute=7, |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.add_job( |
|
validate_access_token, |
|
"cron", |
|
hour="*/2", |
|
next_run_time=datetime.now(), |
|
coalesce=True, |
|
misfire_grace_time=60 * 60 * 12, |
|
) |
|
task.start() |
|
try: |
|
asyncio.get_event_loop().run_forever() |
|
except (KeyboardInterrupt, SystemExit): |
|
pass |
|
|
|
|
|
def start_daemon_scheduler(loop): |
|
t = threading.Thread(target=run_scheduler, args=(loop,), name="schedule", daemon=True) |
|
t.start() |
|
|
|
|
|
async def kill_daemon_scheduler(): |
|
loop = asyncio._get_running_loop() |
|
loop.stop() |
|
|
|
|
|
if __name__ == "__main__": |
|
schedule_loop = asyncio.new_event_loop() |
|
start_daemon_scheduler(schedule_loop) |
|
time.sleep(3) |
|
asyncio.run_coroutine_threadsafe(kill_daemon_scheduler(), loop=schedule_loop) |
|
|