beeware / beeware/briefcase-linux-system-template

Stub binary doesn't support `sys.executable` spawn/multiprocessing

Open
#4 0 comments 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.