What's the equivalence of os.fork() on Windows with Python?

18,122

Solution 1

Depending on your use case and whether you can use python 2.6 or not, you might be able to use the multiprocessing module.

Solution 2

The answer here may not answer the question. The problem is due to fork(). From the example, you seemed want to share data between two Python scripts. Let me explain my view.

As of Python 3.8, there is no true Unix's fork() implementation in Windows platform. For the example above to work, a child process must inherit all environment and open file descriptors.

I understand that Windows now support Windows Linux Subsystem, but the last i checked it still does not fully implement fork. Cygwin does actually but it is a bit slow.

I do not know how, until now, to pass information between two Python scripts using mmap in Windows platform. Use

  1. multiprocessing.Queue or
  2. multiprocessing.Pipe or
  3. multiprocessing.Manager or
  4. multiprocessing's shared memory (Value and Array) instead.

I believe you could make each Python script to read in content of the to-be-mapped file into Array of characters. Then use your own structure to map the shared memory into a structured data as you do for the to-be-mapped file.

Share:
18,122
prosseek
Author by

prosseek

A software engineer/programmer/researcher/professor who loves everything about software building. Programming Language: C/C++, D, Java/Groovy/Scala, C#, Objective-C, Python, Ruby, Lisp, Prolog, SQL, Smalltalk, Haskell, F#, OCaml, Erlang/Elixir, Forth, Rebol/Red Programming Tools and environments: Emacs, Eclipse, TextMate, JVM, .NET Programming Methodology: Refactoring, Design Patterns, Agile, eXtreme Computer Science: Algorithm, Compiler, Artificial Intelligence

Updated on June 09, 2022

Comments

  • prosseek
    prosseek almost 2 years

    This code works well in Mac/Linux, but not in Windows.

    import mmap
    import os
    
    map = mmap.mmap(-1, 13)
    map.write("Hello world!")
    
    pid = os.fork()
    
    if pid == 0: # In a child process
        print 'child'
        map.seek(0)
        print map.readline()
    
        map.close()
    else:
        print 'parent'
    
    • What's the equivalent function of os.fork() on Windows?