简体   繁体   中英

Python Multiprocessing Traceback (most recent call last)

So I tried making an simple example using the python multiprocessing module.

import time
import multiprocessing

start = time.perf_counter()
 
def do_something():
    print('Sleeping 2 sec ...')
    time.sleep(2)
    print('Done Sleeping')

p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)

p1.start()
p2.start()

p1.join()
p2.join()

finish = time.perf_counter()

print(f'Finished in {round(finish-start, 2)} second(s)')

But when I run it, a very long error traceback is printed:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

    PS C:\Goal\VSB\PDS\Project> & C:/Users/Goal/AppData/Local/Programs/Python/Python39/python.exe 
    c:/Goal/VSB/PDS/Project/MultiprocessingPython.py
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
        exitcode = _main(fd, parent_sentinel)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 125, in _main
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 125, in _main
        prepare(preparation_data)
        prepare(preparation_data)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 236, in prepare
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 236, in prepare
        _fixup_main_from_path(data['init_main_from_path'])
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
        _fixup_main_from_path(data['init_main_from_path'])
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
        main_content = runpy.run_path(main_path,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path
        main_content = runpy.run_path(main_path,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path
        return _run_module_code(code, init_globals, run_name,
        return _run_module_code(code, init_globals, run_name,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in _run_module_code
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
        _run_code(code, mod_globals, init_globals,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "c:\Goal\VSB\PDS\Project\MultiprocessingPython.py", line 14, in <module>
        exec(code, run_globals)
      File "c:\Goal\VSB\PDS\Project\MultiprocessingPython.py", line 14, in <module>
        p1.start()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", 
    line 121, in start
        p1.start()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", 
    line 121, in start
        self._popen = self._Popen(self)
        self._popen = self._Popen(self)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 224, in _Popen
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 224, in _Popen
        return _default_context.get_context().Process._Popen(process_obj)
        return _default_context.get_context().Process._Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 327, in _Popen
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 327, in _Popen
        return Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
        return Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
        prep_data = spawn.get_preparation_data(process_obj._name)
        prep_data = spawn.get_preparation_data(process_obj._name)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
        _check_not_importing_main()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 134, in _check_not_importing_main
        _check_not_importing_main()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 134, 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.
        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()
                    ...
    
    ne 134, in _check_not_importing_main
        _check_not_importing_main()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 134, 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.
        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.
    Finished in 0.2 second(s)
    PS C:\Goal\VSB\PDS\Project> & C:/Users/Goal/AppData/Local/Programs/Python/Python39/python.exe 
    c:/Goal/VSB/PDS/Project/MultiprocessingPython.py
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
        exitcode = _main(fd, parent_sentinel)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 125, in _main
        prepare(preparation_data)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 236, in prepare
        _fixup_main_from_path(data['init_main_from_path'])
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
        main_content = runpy.run_path(main_path,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path
        return _run_module_code(code, init_globals, run_name,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in _run_module_code
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
        _run_code(code, mod_globals, init_globals,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 116, in spawn_main
        exec(code, run_globals)
      File "c:\Goal\VSB\PDS\Project\MultiprocessingPython.py", line 14, in <module>
        exitcode = _main(fd, parent_sentinel)
        p1.start()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 125, in _main
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", 
    line 121, in start
        prepare(preparation_data)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 236, in prepare
        self._popen = self._Popen(self)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 224, in _Popen
        _fixup_main_from_path(data['init_main_from_path'])
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 287, in _fixup_main_from_path
        return _default_context.get_context().Process._Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 327, in _Popen
        main_content = runpy.run_path(main_path,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 268, in run_path
        return Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
        return _run_module_code(code, init_globals, run_name,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 97, in _run_module_code
        prep_data = spawn.get_preparation_data(process_obj._name)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
        _run_code(code, mod_globals, init_globals,
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 87, in _run_code
        _check_not_importing_main()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 134, in _check_not_importing_main
        exec(code, run_globals)
      File "c:\Goal\VSB\PDS\Project\MultiprocessingPython.py", line 14, in <module>
        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.    p1.start()
    
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", 
    line 121, in start
        self._popen = self._Popen(self)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 224, in _Popen
        return _default_context.get_context().Process._Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\context.py", 
    line 327, in _Popen
        return Popen(process_obj)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\popen_spawn_win32.py", line 45, in __init__
        prep_data = spawn.get_preparation_data(process_obj._name)
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 154, in get_preparation_data
        _check_not_importing_main()
      File "C:\Users\Goal\AppData\Local\Programs\Python\Python39\lib\multiprocessing\spawn.py", line 134, 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.
    Finished in 0.16 second(s)
    PS C:\Goal\VSB\PDS\Project>

And there are so many things here I don't know if they can be called error? They are just so many that I dont even know what to search on the internet to solve my problem.

When Python throws these massive error statements, make sure to know what you are looking for- the important part to notice is that the error is stemming from a raise call, meaning that you need to look after the raise keywords in the error text.

As you can see, the actual text error thrown (The text found after the line with the raise keyword) is the following:

    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.

After that, you can easily search this up and find a very helpful and detailed answer here (TLDR: You need to use if __name__ == '__main__': so that the code does not recursively import).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM