__import__ 可以实现模块的动态加载,Python中很多框架都使用了这种能力,如Flask的插件系统、APScheduler定时任务框架等。
这里简单看一下APScheduler定时任务框架是怎么使用 __import__ 重新载入任务对象的。
首先,补一下背景知识,简单了解一下APScheduler是如何使用的。
一开始,定义一个类。
from datetime import datetime
import random
class A(object):
def __init__(self):
self.t = self.gen_random()
def tick(self):
print('Tick! The time is: %s' % datetime.now())
print(self.t)
def gen_random(self):
return random.randint(1, 100)
我们希望A类的tick方法每3秒运行一次,通过APScheduler的实现方式如下。
if __name__ == '__main__':
scheduler = BackgroundScheduler() # 创建调度器
scheduler.add_job(A().tick, 'interval', seconds=3) # 添加一个任务,3秒后运行
scheduler.start() # 启动
print('Press Ctrl+{0} to exit'.format('Break