Preventing Pool Processes From Importing __main__ And Globals
Solution 1:
Looking at the multiprocessing.forking
implementation, particularly get_preparation_data
and prepare
(win32-specific), globals aren't getting pickled. The reimport of the parent process's __main__
is a bit ugly, but it won't run any code except the one at the toplevel; not even if __name__ == '__main__'
clauses. So just keep the main module without import-time side-effects.
You can prevent your main module from importing anything when the subprocess starts, too (only useful on win32 which, as you note, can't fork). Move the main()
and its imports to a separate module, so that the startup script contains only:
if'__name__' == '__main__':
from mainmodule import main
main()
There is still an implicit import site
in the child process startup. It does important initialisation and I don't think mp.forking has an easy way to disable it, but I don't expect it to be expensive anyway.
Post a Comment for "Preventing Pool Processes From Importing __main__ And Globals"