On Thu, Mar 29, 2018, 02:02 Chris Angelico <ros...@gmail.com> wrote: > On Thu, Mar 29, 2018 at 7:56 PM, Paul Moore <p.f.mo...@gmail.com> wrote: > > On 29 March 2018 at 09:49, Chris Angelico <ros...@gmail.com> wrote: > >> On Thu, Mar 29, 2018 at 7:18 PM, Nathaniel Smith <n...@pobox.com> wrote: > >>> Another example is the multiprocessing module: it's very safe to > >>> assume that the parent and the child are using the same interpreter > >>> :-). There's no fundamental reason you shouldn't be able to send > >>> bytecode between them. > >> > >> You put a smiley on it, but is this actually guaranteed on all > >> platforms? On Unix-like systems, presumably it's using fork() and thus > >> will actually use the exact same binary, but what about on Windows, > >> where a new process has to be spawned? Can you say "spawn me another > >> of this exact binary blob", or do you have to identify it by a file > >> name? > >> > >> It wouldn't be a problem for the nonportable mode to toss out an > >> exception in weird cases like this, but it _would_ be a problem if > >> that causes a segfault or something. > > > > If you're embedding, you need multiprocessing.set_executable() > > ( > https://docs.python.org/3.6/library/multiprocessing.html#multiprocessing.set_executable > ), > > so in that case you definitely *won't* have the same binary... > > Ah, and that also showed me that forking isn't mandatory on Unix > either. So yeah, there's no assuming that they use the same binary. >
Normally it spawns children using `sys.executable`, which I think on Windows in particular is guaranteed to be the same binary that started the main process, because the OS locks the file while it's executing. But yeah, I didn't think about the embedding case, and apparently there's also a little-known set of features for using multiprocessing between arbitrary python processes: https://docs.python.org/3/library/multiprocessing.html#multiprocessing-listeners-clients > I doubt it'll be a problem to pickle though as it'll use some form of > versioning even in NONPORTABLE mode right? > I guess the (merged, but undocumented?) changes in https://bugs.python.org/issue28053 should make it possible to set the pickle version, and yeah, if we did add a NONPORTABLE mode then presumably it would have some kind of header saying which version of python it was created with, so version mismatches could give a sensible error message. -n
_______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com