Cannot use database cursor object inside a parfor

21 visualizaciones (últimos 30 días)
Tommaso Guseo
Tommaso Guseo el 10 de Abr. de 2018
Editada: TIANTIANBABA el 17 de En. de 2021
If I retrieve data from an sql query using the database interface of matlab database toolbox inside a parfor like this:
parfor i = 1:n
[...]
cursorObj1 = fetch(exec(targetConn,sqlQueryString));
queryData = cursorObj1.Data{1};
[...]
end
Matlab throws the error:
Cell contents reference from a non-cell array object.
Is there a way to accomplish the aforementioned operation inside a parfor? I know the basic rules of variables and objects use inside a parfor, but I can't find a solution for this specific case.

Respuestas (1)

Edric Ellis
Edric Ellis el 17 de Abr. de 2018

You need to create the database connection targetConn directly on the workers. One way to achieve this is to use a parallel.pool.Constant to hold on to it. Something a bit like this:

connection = parallel.pool.Constant(@() database(...), @close);
parfor ...
  ...
  cursorObj1 = fetch(exec(connection.Value, ...));
  ...
end

Note that the second argument to the parallel.pool.Constant constructor is the "cleanup" function - this will close the underlying connection when connection goes out of scope.

  3 comentarios
AJ Geiger
AJ Geiger el 19 de Mayo de 2018
Not that I know :/ of if you want to debug a parfor loop I have found the best way to do it is to convert the parfor loop to just a for loop.
TIANTIANBABA
TIANTIANBABA el 17 de En. de 2021
Editada: TIANTIANBABA el 17 de En. de 2021
Hello. Even if I build the connection inside the parfor-loop, it seems that exec and fetch still can not work when inside the parfor-loop.
Here is my needs:
I have many sqlite files, and I need to export data from every sqlite file. I want to use parfor-loop to speed up, and inside the loop, I want each worker to connect to a different file, then do the data export work. But until now I don't succeed.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by