如何使Python Context Manager包装一段代码并批量执行它?

时间:2019-04-08 17:21:37

标签: python

在python中是否可以存储本应执行的函数?

更具体地说,是否可以使用上下文管理器创建它?我曾经见过一个上下文管理器,该上下文管理器将重试内部的所有包装代码,但是我不知道该怎么做。

例如,假设我有

def print():
  print("printed")

我想要实现的是这样的:

with StopFunctionsExecution() as functions_executed:
   print()
   print()
   print()
   # So far, nothing in console
   functions_executed.run_all()  #  or on __exit__
   # All 3 printed in console

1 个答案:

答案 0 :(得分:0)

您不能“安排”常规代码的执行,而不能立即执行它,因为这将要求更改该代码的解释方式,即更改解释器。

但是您可以更改何时解释器执行该代码:

def batch(*args):
    for fn, *args_ in args:
        fn.__call__(*args_)

def foo():
    print("blah")
    print("blar")
    print("xyzzy")

batch_list = ((print, "foo"),(print, "bar"), (print, "baz"), (foo,))

<somewhere later>
batch(*batch_list)

这是安排调用在threadingmultiprocessing中其他位置执行的方式,即分别传递函数及其参数。