Skip to main content
 首页 » 编程设计

python之存储代码以供以后执行的最佳方式(python)

2025年05月04日9落叶

我有一些任务存储在数据库中供以后执行。例如,我可以修复发送电子邮件的任务。并通过 cron 执行任务(发送)。我搜索将代码存储在数据库中以供以后执行的最佳方法。对于 ex 将它存储在 python 代码的原始字符串中而不是 eval,但我也必须在这里存储相对导入..

例如,对于发送电子邮件,我必须像这样修复字符串:

s = "从 django.core.mail 导入 send_mail\n send_mail('subj', 'body', 'email@box.ru',['email1@box.ru'], fail_silently=False)"

和后来的评估.. 有什么想法可以用最好的方式或更好的模式来完成这种任务吗?

请您参考如下方法:

您正在做的是一个坏主意,主要是因为您允许执行的代码有太多可变性。一个代码字符串可以做任何,我猜您只想存储几种任务以供以后执行。

因此,弄清楚这些任务中的变量是什么(非编程意义上的变量:变化的事物),并且只存储这些变量,可能作为函数参数的元组和要应用的关键字参数的字典到已知函数。

更奇特的是,您可以拥有某种带有一堆函数的容器对象,并存储要调用的函数的名称及其参数。该容器可以像一个模块一样简单,您可以在其中导入 Django 的 send_mail 等功能,如示例中所示。

然后您可以像这样存储示例调用:

func = 'send_mail' 
args = ('subj', 'body', 'email@box.ru', ['email1@box.ru']) 
kwargs = {'fail_silently': False} 
 
my_call = cPickle.dumps((func, args, kwargs))  

然后像这样使用它:

func, args, kwargs = cPickle.loads(my_call) 
 
getattr(my_module, func)(*args, **kwargs)