Pergunta

No Parallel Python, por que é necessário agrupar todos os módulos que a função passada precisará junto com variáveis ​​​​e namespaces naquela chamada de envio de trabalho - quão necessário é preservar variáveis ​​​​"globais" no nível do módulo?(se isso é tudo que está acontecendo)

função de envio:

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()
Foi útil?

Solução

A razão pela qual pp funciona da maneira que funciona, é criar uma nova instância do interpretador Python para cada trabalhador, que é completamente independente de qualquer coisa que tenha sido executada antes ou depois.Isso garante que não haja efeitos colaterais indesejados, como __future__ as importações estão ativas no processo de trabalho.O problema com isso é que torna as coisas muito mais complicadas de acertar e, na minha experiência com pp, não particularmente robusto. pp faz tenta tornar as coisas um pouco mais fáceis para o usuário, mas parece introduzir mais problemas do que soluções em seus esforços para fazer isso.

Se eu escrevesse um código projetado para uso em um cluster desde o início, provavelmente acabaria usando pp, mas descobri que adaptar o código existente para trabalhar com pp é um pesadelo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top