[QGIS-Developer] Unload QgsVectorLayer/QgsrasterLayer

Bourdon, Jean-François (DIF) Jean-Francois.Bourdon at mffp.gouv.qc.ca
Tue Aug 11 09:28:09 PDT 2020


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<https://gis.stackexchange.com/a/312884/109610> 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. It's like if QgsVectorFileWriter is now keeping a lock on the shapefile (if a remove this line, the shapefile gets deleted). However, if I use the Package layers tool, I can delete the shapefile without any itch.

# 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<mailto: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<mailto:jean-francois.bourdon at mffp.gouv.qc.ca>
> mffp.gouv.qc.ca
>
>
>
> _______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org<mailto: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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20200811/79d6c41e/attachment-0001.html>


More information about the QGIS-Developer mailing list