Signal handlers to stop in shutdown(). #81
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
ModbusTcpServer
currently overridesserver_close
to signal its request handlers to stop processing, but doesn't do the same withshutdown
. The result is that when running the server usingserve_forever
in another thread, and then trying to signal it to stop by callingshutdown
from the main thread, then theshutdown
call will block forever if there are ongoing requests, since the handler threads never finishes.Minimal Example
server.py
client.py
Instructions
server.py
.client.py
.Ctrl+C
in the terminal runningserver.py
.With this patch,
ModbusTcpServer
overridesshutdown
to signal all handlers to stop before calling the base class implementation. The server now exits as expected.Note that the above was just an example, where threading was not necessary. In my real use case, I had a Qt application that ran
serve_forever
in a separate thread, to avoid blocking the Qt event loop.