[QGIS-Developer] Unload QgsVectorLayer/QgsrasterLayer

Nyall Dawson nyall.dawson at gmail.com
Tue Aug 11 16:11:01 PDT 2020


On Wed, 12 Aug 2020 at 02:28, Bourdon, Jean-François (DIF)
<Jean-Francois.Bourdon at mffp.gouv.qc.ca> wrote:
>
> Thanks a lot Nyall!
> I must say that it's not obvious for a newcomer to see where the problem is and how to fix it. With you pointer, I ended up to one of your answer on GIS SE to learn how to return FlagNoThreading flag. So it closes my issue with the raster file deletion, but it now causes the same problem elsewhere with the deletion of a shapefile.

This one was fixed in recent versions -- either upgrade to 3.14, or
downgrade to the most recent LTR. 3.12 is EOLed and didn't get this
fix.

Nyall


>
> # Convert Shapefile to Geopackage with error without threading
> path_SHP = "C:/temp/vector.shp"
> vlayer_SHP = QgsVectorLayer(path_SHP)
> options_GPKG = QgsVectorFileWriter.SaveVectorOptions()
> options_GPKG.driverName = "GPKG"
> options_GPKG.layerName = "streams"
> QgsVectorFileWriter.writeAsVectorFormatV2(vlayer_SHP, "C:/temp/vector_package.gpkg", QgsCoordinateTransformContext(), options_GPKG)
>
> QgsProject.instance().addMapLayer(vlayer_SHP, False)
> QgsProject.instance().removeMapLayer(vlayer_SHP.id())
> QgsVectorFileWriter.deleteShapeFile(path_SHP)
>
>
>
> # Convert Shapefile to Geopackage without error and without threading
> path_streams_SHP = "C:/temp/vector.shp"
> processing.run("native:package", {'LAYERS':[path_streams_SHP],'OUTPUT':"C:/temp/vector_package.gpkg",'OVERWRITE':True,'SAVE_STYLES':False})
> QgsVectorFileWriter.deleteShapeFile(path_streams_SHP)
>
>
>
>
> Jean-François Bourdon, ing.f.
> Analyste en télédétection
> Direction des inventaires forestiers
> Ministère des Forêts, de la Faune et des Parcs
> 5700, 4e Avenue Ouest, local A-108
> Québec (Québec) G1H 6R1
> Téléphone : 418 627-8669, poste 4304
> jean-francois.bourdon at mffp.gouv.qc.ca
> mffp.gouv.qc.ca
>
> -----Message d'origine-----
> De : Nyall Dawson [mailto:nyall.dawson at gmail.com]
> Envoyé : 10 août 2020 18:46
> À : Bourdon, Jean-François (DIF) <Jean-Francois.Bourdon at mffp.gouv.qc.ca>
> Cc : qgis-developer at lists.osgeo.org
> Objet : Re: [QGIS-Developer] Unload QgsVectorLayer/QgsrasterLayer
>
> On Tue, 11 Aug 2020 at 06:37, Bourdon, Jean-François (DIF) <Jean-Francois.Bourdon at mffp.gouv.qc.ca> wrote:
> >
> > Hi list,
> >
> >
> >
> > I have a very simple problem: I can’t delete a file after loading it with QgsVectorLayer() or QgsRasterLayer() within a script (custom Processing Provider) as I get the error saying the file is still in use. My code to replicate:
> >
> >
> >
> > path_raster = "C:/temp/raster.tif"
> >
> > rlayer = QgsRasterLayer(path_raster, "flow")
> >
> > QgsProject.instance().addMapLayer(rlayer, False)
> >
> > QgsProject.instance().removeMapLayer(rlayer.id())
> >
> > os.remove(path_raster)
> >
> >
> >
> > However, the same code directly put inside the Python Console within QGIS works, but it won’t if used inside a Processing Provider plugin. I also tried using del rlayer without success. There is several questions about releasing QGIS’ lock on files on GIS StackExchange (e.g. here and here) but it doesn’t seem to work for everyone. Maybe it was working in version 2.X, but it fails on 3.12 (Windows 10).
>
> I suspect your algorithm is incorrectly running in a thread. You CAN'T do this if your algorithm directly access the project instance -- it's not thread safe and the layers are likely not getting deleted at all.
> Try returning the FlagNoThreading flag from your algorithm's flags() override.
>
> Nyall
>
>
> >
> >
> >
> > Many thanks
> >
> >
> >
> > Jean-François Bourdon, ing.f.
> >
> > Analyste en télédétection
> > Direction des inventaires forestiers
> > Ministère des Forêts, de la Faune et des Parcs 5700, 4e Avenue Ouest,
> > local A-108 Québec (Québec) G1H 6R1 Téléphone : 418 627-8669, poste
> > 4304 jean-francois.bourdon at mffp.gouv.qc.ca
> > mffp.gouv.qc.ca
> >
> >
> >
> > _______________________________________________
> > QGIS-Developer mailing list
> > QGIS-Developer at lists.osgeo.org
> > List info: https://can01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.osgeo.org%2Fmailman%2Flistinfo%2Fqgis-developer&data=02%7C01%7C%7C72ed7712914543cfa40908d83d7f1f60%7C8705e97737814f4790e1c84c8b884da1%7C0%7C0%7C637326963481150210&sdata=6%2FDPX0W3P6BHnYAdJ9%2BX%2FTdD%2BhYQIzeuM5gbMayTEOo%3D&reserved=0
> > Unsubscribe: https://can01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.osgeo.org%2Fmailman%2Flistinfo%2Fqgis-developer&data=02%7C01%7C%7C72ed7712914543cfa40908d83d7f1f60%7C8705e97737814f4790e1c84c8b884da1%7C0%7C0%7C637326963481150210&sdata=6%2FDPX0W3P6BHnYAdJ9%2BX%2FTdD%2BhYQIzeuM5gbMayTEOo%3D&reserved=0
>


More information about the QGIS-Developer mailing list