[QGIS-Developer] QGIS Server plugins and thread safety
David Marteau
dmarteau at 3liz.com
Sun Nov 19 08:36:48 PST 2017
Hi,
IMHO, The multi process approach has to be preferred over multi-threading
Some thought about it:
Forking sever instance for each request is imho a bad idea as it is not scalable and defeat resource control.
I think that it is not a problem by itself to consider the server engine as single worker process: there is numerous cases where it is much better handled using appropriates tools:
- Use supervisor with fcgi prefork to handle a pool of server (not sure is is appropriate here)
- Embed the server in a asynchronous framework (like tornado, or python 3 asyncio) and use multiprocessing to handle your server workers.
- Embed as wsgi application and use gunicorn mumérous options to handle requests queues and the number workers.
…
David.
IMHO this can be handled in much better way with other tools:
> Le 19 nov. 2017 à 10:34, Alessandro Pasotti <apasotti at gmail.com> a écrit :
>
> Hi,
>
> mi recent experiments with multi-threaded python wrappers for QGIS server showed a critical flaw in my original implementation of the server plugins.
>
> First, I want to stress that this is not a problem in FCGI server implementation but only if the server is used directly from python in a multi threaded server implementation.
>
> The problem is that the server interface that exposes the request handler is a static property of the interface, that is changed on every request.
> This means that there is a race condition in setting/accessing the handler from a plugin filter, and that a plugin filter might access to the handler for a wrong request.
>
> The solution is to pass the request handler (or the request and/or response objects depending on the filter) to the plugin filters and leave the interface for static properties only.
>
> This would be a big API change for the server interface and filters and I'm not sure we have time/resources to do that now.
>
> As an alternative we could simply document the issue and change the testing code to create a new server instance to server every request (to be verified, and with consitent performance degradation).
>
> What's your opinion about this issue?
>
> BTW, tomorrow I'll file a ticket for this problem.
>
> --
> Alessandro Pasotti
> w3: www.itopen.it <http://www.itopen.it/>_______________________________________________
> QGIS-Developer mailing list
> QGIS-Developer at lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20171119/4f8bd6a9/attachment-0001.html>
More information about the QGIS-Developer
mailing list