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

Evg*_*Evg 1 python queue serialization task

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

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

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

以后eval ..任何想法做到最好的方式或更好的模式这种任务?

Bri*_*man 5

你正在做的是一个坏主意,主要是因为你允许在执行什么代码时有太多的变化.代码字符串可以做任何事情,我猜你只想存储几种任务以便以后执行.

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

更加花哨的是,你可以拥有一些带有一堆函数的容器对象,并存储要调用的函数的名称及其参数.该容器可以像send_mail您在示例中导入Django之类的函数一样简单.

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

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

my_call = cPickle.dumps((func, args, kwargs)) 
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

func, args, kwargs = cPickle.loads(my_call)

getattr(my_module, func)(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)