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()

 

 

 

posted @ 2020-09-29 19:05  Adamanter  阅读(271)  评论(0)    收藏  举报