Does python multiprocessing work in Visual Studio Code?

Question:

I’m having a problem where VS Code returns an error when I run my multiprocessing code.
I’m pretty new to multiprocessing and VS Code, so I am completely in the dark on what to do to fix this error. I’ve looked up numerous tutorials on how to implement multiprocessing and even straight up copied the majority of the below code from a tutorial in an attempt to see if I made a mistake in my code, but every time I run the code, it sends the error message in the terminal.
The code:

import multiprocessing
#12 cpu's
import time

def sleepy_man():
    print('Starting to sleep')
    time.sleep(1)
    print('Done sleeping')

if __name__ == '__main__':
    multiprocessing.freeze_support()
    ...

tic = time.time()
p1 =  multiprocessing.Process(target= sleepy_man)
p2 =  multiprocessing.Process(target= sleepy_man)
p1.start()
p2.start()
p1.join()
p2.join()
toc = time.time()
print('Done in {:.4f} seconds'.format(toc-tic))

The error:

PS C:Usersme.py> & C:/Users/me/AppData/Local/Microsoft/WindowsApps/python3.11.exe c:/Users/me/.py/multiprocessinglearn.py
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 120, in spawn_main
    exitcode = _main(fd, parent_sentinel)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 129, in _main
    prepare(preparation_data)
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 240, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 291, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen runpy>", line 291, in run_path
  File "<frozen runpy>", line 98, in _run_module_code
  File "<frozen runpy>", line 88, in _run_code
  File "c:Users100146766.pymultiprocessinglearn.py", line 17, in <module>
    p1.start()
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingprocess.py", line 121, in start
    self._popen = self._Popen(self)
                  ^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingcontext.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingcontext.py", line 336, in _Popen
    return Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingpopen_spawn_win32.py", line 45, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 158, in get_preparation_data
    _check_not_importing_main()
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 138, in _check_not_importing_main
    raise RuntimeError('''
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 120, in spawn_main
    exitcode = _main(fd, parent_sentinel)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 129, in _main
    prepare(preparation_data)
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 240, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 291, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen runpy>", line 291, in run_path
  File "<frozen runpy>", line 98, in _run_module_code
  File "<frozen runpy>", line 88, in _run_code
  File "c:Users100146766.pymultiprocessinglearn.py", line 17, in <module>
    p1.start()
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingprocess.py", line 121, in start
    self._popen = self._Popen(self)
                  ^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingcontext.py", line 224, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingcontext.py", line 336, in _Popen
    return Popen(process_obj)
           ^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingpopen_spawn_win32.py", line 45, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 158, in get_preparation_data
    _check_not_importing_main()
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.11_3.11.752.0_x64__qbz5n2kfra8p0Libmultiprocessingspawn.py", line 138, in _check_not_importing_main
    raise RuntimeError('''
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

I have no clue what VS Code is asking for and how to fix this.

I’ve tried a number of different fixes:
Adding the freeze_support() line that VS Code was recommending.
Copying tutorial code.
I’ve imported just Process, and just freeze_support, those almost worked, but brought up some errors in the code that when I fixed the errors, brought back the same error message in the terminal.

I feel like I am missing something vital to getting multiprocessing to work, do I have to place the p1.start() and p1.join() into the if statement?

Asked By: Sebastian Nevarez

||

Answers:

You are not quite using the idiom correctly…

Try:

import multiprocessing
import time

def sleepy_man():
    print('Starting to sleep')
    time.sleep(1)
    print('Done sleeping')

if __name__ == '__main__':
    tic = time.time()
    p1 =  multiprocessing.Process(target= sleepy_man)
    p2 =  multiprocessing.Process(target= sleepy_man)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    toc = time.time()
    print('Done in {:.4f} seconds'.format(toc-tic))
Answered By: JonSG
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.