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.
ModbusTcpServercurrently overridesserver_closeto signal its request handlers to stop processing, but doesn't do the same withshutdown. The result is that when running the server usingserve_foreverin another thread, and then trying to signal it to stop by callingshutdownfrom the main thread, then theshutdowncall 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+Cin the terminal runningserver.py.With this patch,
ModbusTcpServeroverridesshutdownto 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_foreverin a separate thread, to avoid blocking the Qt event loop.