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
[email protected]
mffp.gouv.qc.ca
-----Message d'origine-----
De : Nyall Dawson [mailto:[email protected]]
Envoyé : 10 août 2020 18:46
À : Bourdon, Jean-François (DIF) <[email protected]>
Cc : [email protected]
Objet : Re: [QGIS-Developer] Unload QgsVectorLayer/QgsrasterLayer
On Tue, 11 Aug 2020 at 06:37, Bourdon, Jean-François (DIF)
<[email protected]<mailto:[email protected]>>
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
> [email protected]<mailto:[email protected]>
> mffp.gouv.qc.ca
>
>
>
> _______________________________________________
> QGIS-Developer mailing list
> [email protected]<mailto:[email protected]>
> 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
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer