Python e il multiprocess
Inviato: lunedì 23 ottobre 2017, 15:25
Salve a tutti gli utenti di OpenOffice e LibreOffice
Nell'uso di Calc devo sviluppare delle analisi e dei calcoli sulle celle del foglio.
Ho scoperto l'enorme potenzialità velocità e semplicità di affiancare Python al Basic.
in Basic le seguenti istruzioni che riporto se utili a qualcuno, provvedono ad un ponte tra i due ambienti:
Tutto funziona alla perfezione, e poichè l'appetito vien mangiando, ho pensato di implementare il
multiprocessing di python con la funzione pool, semplice da utilizzare. Ad esempio in Python l'esempio
più semplice ,senza parametri, che funziona perfettamente lanciata in un editor di Python
Lanciata da Basic come LanciaPyFunct(sFilePy , "MPS", Array()) da un errore, sintetizzato:
'Error 1 calling MPS
Type: com.sun.star.uno.RuntimeException
(<class 'AttributeError'>:'module' object has no attribute 'argv' ...
Qualcuno è in grado di esporre qualche considerazione ???
Io ho verificato che lanciando da Python, vengono creati tanti ulteriori processi autonomi python.exe pari ai processori del PC.
Forse LibreOffice non riesce a creare tali processi con un python all'interno del proprio processo ???
Grazie per eventuali approfondimenti
Nicola Giardinelli
Nell'uso di Calc devo sviluppare delle analisi e dei calcoli sulle celle del foglio.
Ho scoperto l'enorme potenzialità velocità e semplicità di affiancare Python al Basic.
in Basic le seguenti istruzioni che riporto se utili a qualcuno, provvedono ad un ponte tra i due ambienti:
Codice: Seleziona tutto
Function LanciaPyFunct(sFilePy , funct , args As Array)
'sFilePy = "MyPyFunct.py" ' modulo implementato della mia dir LibreOffice/4/user/Scripts/python
'funct = MPS ' la mia funzione nel modulo MyPyFunct.py
' args = Array(par1, par2, ...) i parametri della funzione funct
sFunctionPy = "vnd.sun.star.script:" & sFilePy & "$" & func & _
"?language=Python&location=user"
oMSPF = createUnoService( _
"com.sun.star.script.provider.MasterScriptProviderFactory")
gScriptProvider = oMSPF.createScriptProvider("")
oScript = gScriptProvider.getScript(sFunctionPy)
pyReturn = oScript.invoke(args, Array(), Array())
multiprocessing di python con la funzione pool, semplice da utilizzare. Ad esempio in Python l'esempio
più semplice ,senza parametri, che funziona perfettamente lanciata in un editor di Python
Codice: Seleziona tutto
import multiprocessing
def MP(x):
return x * x
def MPS():
oPool = multiprocessing.Pool() #multiprocessing.
aResults = oPool.map( MP, (1, 2, 3, 4, 5, 6, 7, 8) )
oPool.close()
return aResults # tupla dei quadrati dei numeri
pass
'Error 1 calling MPS
Type: com.sun.star.uno.RuntimeException
(<class 'AttributeError'>:'module' object has no attribute 'argv' ...
Qualcuno è in grado di esporre qualche considerazione ???
Io ho verificato che lanciando da Python, vengono creati tanti ulteriori processi autonomi python.exe pari ai processori del PC.
Forse LibreOffice non riesce a creare tali processi con un python all'interno del proprio processo ???
Grazie per eventuali approfondimenti
Nicola Giardinelli