Python线程: 常用继承线程类Thread和新开线程
最简单的例子
import time
from threading import Thread
from apscheduler import events
from apscheduler.events import JobEvent
from loguru import logger
from apscheduler.triggers.cron import CronTrigger
from apscheduler.schedulers.blocking import BlockingScheduler
class MyTask(Thread): """ MyTask().start()启动的函数必须是run() """ def __init__(self): Thread.__init__(self) def run(self): print("Hello World")
MyTask().start()
加入定时器执行任务的例子
class MyTask(Thread): """ MyTask().start()启动的函数必须是run() """ def __init__(self): Thread.__init__(self) self.scheduler = BlockingScheduler() def _start_run(self): time.sleep(1) print("EXE TASK ING ...") time.sleep(1) def init_job_completed_listener(self, event, name='赢家复盘'): if isinstance(event, JobEvent): if event.code == events.EVENT_JOB_EXECUTED: logger.info("{} 任务执行成功 event.job_id={}".format(name, event.job_id)) elif event.code == events.EVENT_JOB_ERROR: logger.error("{} 任务执行失败 event.job_id={}".format(name, event.job_id)) else: pass def run(self): print("Hello World")
# 监听任务回调查看是否成功 self.scheduler.add_listener(self.init_job_completed_listener)
# 小时定时 # trig_start = CronTrigger(day_of_week='mon-sun', hour='11,15', minute='00', second='00') # self.scheduler.add_job(id='trig_start', func=self._start_run, trigger=trig_start) # 每隔2秒执行一次 self.scheduler.add_job(self._start_run, 'interval', id='trig_start', seconds=2) self.scheduler.start() MyTask().start()
# Hello World
# EXE TASK ING ...
# Execution of job "MyTask._start_run (trigger: interval[0:00:02], next run at: 2020-09-29 18:03:10 CST)" skipped: maximum number of running instances reached (1)
# 2020-09-29 18:03:10.155 | INFO | __main__:init_job_completed_listener:37 - 赢家复盘 任务执行成功 event.job_id=trig_start
# EXE TASK ING ...
# Execution of job "MyTask._start_run (trigger: interval[0:00:02], next run at: 2020-09-29 18:03:14 CST)" skipped: maximum number of running instances reached (1)
# 2020-09-29 18:03:14.155 | INFO | __main__:init_job_completed_listener:37 - 赢家复盘 任务执行成功 event.job_id=trig_start
# EXE TASK ING ...
非继承线程类而是直接新开线程
import threading class MyTask(object): """ MyTask().start()启动的函数必须是run() """ def __init__(self): pass def _start_run(self): print("Hello World") def start(self): # 开启线程, 任务为定时器, 加监控 threading_obj = threading.Thread(target=self._start_run, args=()) threading_obj.start() MyTask().start()