字符串实现包名导入和函数使用
最近用
django想动态的注册相关的函数来实现定时任务,但是执行定时任务的函数和所在文件名是不确定的,需要动态的调用
注册函数
def register_func(func_name, package_name: str, trigger, configuration):
'''
注册包名和函数
:param package_name:所在的包名
:param func_name:
:return:
'''
configuration = json.dumps(configuration, ensure_ascii=False)
if not Task.objects.filter(name=func_name):
Task.objects.create(name=func_name,
package_name=package_name)
else:
logger.info("相同函数名 %s 的任务已经注册!" % func_name)
注册函数的使用
register_func('func_name',
'app_name.dir_name.file_name',
'cron',
cron_time)
把这些数据存入数据库,通过task来获取数据数据
动态引用
需要使用importlib
import importlib
package_path = importlib.util.find_spec(task.package_name)
# 因为是函数内部使用func
if package_path:
package = importlib.import_module(task.package_name)
func = getattr(package, task.name)
func就是对应需要使用的函数了
动态注册与调用函数
本文介绍如何在Python中利用Django框架动态注册并调用不确定名称的函数,实现定时任务的功能。通过将函数名及所在包名等信息保存到数据库,并使用importlib模块动态加载这些函数。
933

被折叠的 条评论
为什么被折叠?



