查找函数依赖项

时间:2016-09-02 16:04:33

标签: python module namespaces dependencies

上下文:

我必须使用次优API到计算群集,其工作方式如下:

  • run(func, args)其中func是一个函数,args是一个参数列表。 runargs中的每个arg与func的(副本)一起发送给群集的单独工作人员,以便它可以执行func(arg)并报告结果。 run(func, args)然后返回从工作人员汇总的结果列表。

func在每个工人的清​​洁和密封环境中执行。这意味着如果func使用任何非标准库,则工作者可能没有库,并且当func执行时,库/模块不会在命名空间中。现在,这两个问题通过以下方式解决:

  1. 使用API​​的attach(file)函数,file可以是模块或脚本。这会将给定的file发送给每个工作人员,以便库
  2. import中添加func语句,以便命名空间符合worker的预期。
  3. 这会导致恼人的代码,如:

    import lib
    
    # Code agnostic to being executed on a cluster.
    def foo(x):
      return lib.method(2)
    
    ...
    
    # At this point we want to executed some of our code on the cluster.
    def job(x):
      import lib
      return foo(x)
    cluster = Cluster()
    cluster.attach(lib)
    results = cluster.run(job, [1,2,3])
    

    库需要导入两次(并且在job中正确导入)并手动附加到群集。

    问题:

    只需给出func,我可以自动管理群集的库/模块吗?更具体地说,有没有一种方法可以收集执行func所需的所有模块,将它们发送到具有attach的集群,并装饰func以导入这些模块一次集群(基本上复制了func在执行时可用的命名空间)?

    谢谢!

0 个答案:

没有答案