[DRAFT] [Refactor] Threading cleanup & standardization #535
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.
Description
Light refactors for how we manage child threads and pass data back and forth in a threadsafe manner.
Replaces the
keep_running
check with the more standardthreading.Event
objects.Event.is_set()
.Event.wait(timeout=foo)
.New
ThreadsafeVar[T]
generic type class. Some child threads update or return variables that previously had to be stuffed into theThreadsafeCounter
class even if the use case within the thread wasn't actually an int counter (e.g. bools). This was always a bit awkward and made the code difficult to understand ("why is this counter storing 0 and being treated as False"?). The generic typing allows theThreadsafeVar
to be typed and instantiated for a specific basic type (int, str, bool, etc).Extensive tests added to specifically test:
Minor bugfix: Live camera preview can sometimes remain onscreen when LEFT (cancel) is used. This is caused by a race condition between the parent Coordinator thread returning to Home and rendering the screen vs the child live preview thread continuing to do its work before it is successfully killed. This fix explicitly waits for the child thread to exit (
thread.join()
) before the Coordinator thread can move on.Misc:
Remaining steps
-[ ] Verify SD card inserted/removed toast notifications
-[ ] Expand brute force address verification tests to include all supported address types
Include screenshots of any new or modified screens (or at least explain why they were omitted)
This pull request is categorized as a:
Checklist
pytest
and made sure all unit tests pass before sumbitting the PRIf you modified or added functionality/workflow, did you add new unit tests?
I have tested this PR on the following platforms/os:
Note: Keep your changes limited in scope; if you uncover other issues or improvements along the way, ideally submit those as a separate PR. The more complicated the PR the harder to review, test, and merge.