I have a big code that take a while to make calculation, I have decided to learn about multithreading and multiprocessing because only 20% of my processor was being used to make the calculation. After not having any improvement with multithreading, I have decided to try multiprocessing and whenever I try to use it, it just show a lot of errors even on a very simple code.
this is the code that I tested after starting having problems with my big calculation heavy code :
from concurrent.futures import ProcessPoolExecutor def func(): print("done") def func_(): print("done") def main(): executor = ProcessPoolExecutor(max_workers=3) p1 = executor.submit(func) p2 = executor.submit(func_) main() and in the error message that I amhaving it says
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() ... this is not the whole message because it is very big but I think that I may be helpful in order to help me. Pretty much everything else on the error message is just like "error at line ... in ..."
If it may be helpful the big code is at : https://github.com/nobody48sheldor/fuseeinator2.0 it might not be the latest version.
main()? That's where the problem is. On Windows, multiprocessing starts a new python and then imports your module. Code at module level runs a second time. If you callmain(), it gets called again in the subprocess and your whole program re-executes. Python detected that and gave the warning instead. Stuff insideif __name__ == "__main__":is not executed on mere importing. So stick your top level script code inside there and it works.main()? Can you add that to the example code to make it runnable? See Safe importing of main module in The spawn and forkserver start methods - Windows spawns.