beeware / beeware/briefcase-linux-system-template
Stub binary doesn't support `sys.executable` spawn/multiprocessing
- Dominant language
- C
- Stars
- 5
- Forks
- 14
- Avg merge
- 5h 33m
- Merged PRs (30d)
- 6
Description
### Describe the bug
The stub binary used to start an app is an effective replacement for the `python` binary; however, it isn't a perfect replacements. `multiprocessing` in spawn mode will try to invoke `sys.executable` to spawn a child; it's also common to use `subprocess` or `os.spawn` to try and start `sys.exectuable` to run other Python code as a subprocess. However, the stub binary doesn't support this kind of execution.
### Steps to reproduce
1. Generate a stub system app
2. Add a call to call `multiprocessing.Process()` and start it with `.start()`
The subprocess will call the parent process entry point, and fail.
### Expected behavior
The function targeted by `Process()` should be invoked with the provided arguments.
### Screenshots
_No response_
### Environment
- Operating System: All Linux
- Python version: All
- Software versions:
- Briefcase: 0.3.13
### Logs
_No response_
### Additional context
See https://github.com/beeware/briefcase-macOS-app-template/issues/7 for an analogous report on macOS.
One possible solution would be to add some logic to the stub binary to inspect to see if the parent process is "self"; if so, the execution of the app should be modified to behave as if it were a normal Python binary.
Any solution should also be ported to macOS (beeware/briefcase-macOS-Xcode-template#20) and Windows (beeware/briefcase-windows-VisualStudio-template#8).
Contributor guide
Assessment
This issue has not been assessed yet.