在并行Python中,为什么有必要在该作业提交调用中包装传递的函数以及变量和命名空间所需的任何模块 - 如何保留模块级“全局”变量? (如果就是这样的话)
提交功能:
submit(self, func, args=(), depfuncs=(), modules=(), callback=None, callbackargs=(),group='default', globals=None)
Submits function to the execution queue
func - function to be executed
args - tuple with arguments of the 'func'
depfuncs - tuple with functions which might be called from 'func'
modules - tuple with module names to import
callback - callback function which will be called with argument
list equal to callbackargs+(result,)
as soon as calculation is done
callbackargs - additional arguments for callback function
group - job group, is used when wait(group) is called to wait for
jobs in a given group to finish
globals - dictionary from which all modules, functions and classes
will be imported, for instance: globals=globals()
答案 0 :(得分:3)
pp
的工作原理是,它为每个工作者创建一个Python解释器的新实例,它完全独立于之前或之后运行的任何事物。这可确保不会出现意外的副作用,例如__future__
导入在工作进程中处于活动状态。这样做的问题在于它使事情变得更加复杂,而且根据我对pp
的体验,并不是特别健壮。 pp
确实试图让用户更容易一些事情,但似乎引入的问题多于它在努力实现这一目标时所解决的问题。
如果我从一开始就编写专为在群集上使用而设计的代码,我可能最终会使用pp
,但我发现调整现有代码以使用pp
是一场噩梦。