Last active
March 26, 2016 17:34
-
-
Save logston/fda5b0e410b82acfec0b to your computer and use it in GitHub Desktop.
Does multiprocessing copy modules or does it share state with the other processes?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| Does multiprocessing copy modules or does it share state | |
| with the other processes. I'm almost 100% sure it copies | |
| the state, but why not try an experiment to find out. | |
| """ | |
| import multiprocessing | |
| import sys | |
| def get_sys_module_ids(conn): | |
| ids_by_name = {name: id(mod) for name, mod in sys.modules.items()} | |
| conn.send(ids_by_name) | |
| def main(): | |
| return_dicts = [] | |
| processes = [] | |
| for _ in range(2): | |
| parent_conn, child_conn = multiprocessing.Pipe() | |
| p = multiprocessing.Process(target=get_sys_module_ids, args=(child_conn,)) | |
| p.start() | |
| print('Started process', p.pid) | |
| return_dicts.append(parent_conn.recv()) | |
| processes.append(p) | |
| for process in processes: | |
| process.join() | |
| dict_1, dict_2 = return_dicts[0], return_dicts[1] | |
| dict_2_keys = set(dict_2.keys()) | |
| for key in dict_1: | |
| id_1 = dict_1.get(key) | |
| id_2 = dict_2.get(key) | |
| dict_2_keys.remove(key) | |
| print(key, id_1, id_2, end=' ') | |
| if id_1 != id_2: | |
| print('Unequal') | |
| else: | |
| print('Equal') | |
| for key in dict_2_keys: | |
| id_2 = dict_2.get(key) | |
| print(key, None, id_2, 'Unequal') | |
| main() | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Started process 77902 | |
| Started process 77903 | |
| os 4330959960 4330959960 Equal | |
| _bz2 4334097896 4334097896 Equal | |
| io 4330604408 4330604408 Equal | |
| _frozen_importlib_external 4330321384 4330321384 Equal | |
| _posixsubprocess 4334660488 4334660488 Equal | |
| collections 4332247304 4332247304 Equal | |
| _sre 4331694424 4331694424 Equal | |
| keyword 4332430184 4332430184 Equal | |
| genericpath 4331325704 4331325704 Equal | |
| _imp 4330243800 4330243800 Equal | |
| time 4332195336 4332195336 Equal | |
| reprlib 4332483752 4332483752 Equal | |
| random 4333360536 4333360536 Equal | |
| token 4332686856 4332686856 Equal | |
| _sitebuiltins 4330960040 4330960040 Equal | |
| _collections 4332484232 4332484232 Equal | |
| site 4330905496 4330905496 Equal | |
| _functools 4332589928 4332589928 Equal | |
| shutil 4333309128 4333309128 Equal | |
| _random 4334152824 4334152824 Equal | |
| _heapq 4332432184 4332432184 Equal | |
| __mp_main__ 4330534296 4330534296 Equal | |
| _io 4330321304 4330321304 Equal | |
| _stat 4331324104 4331324104 Equal | |
| linecache 4332248184 4332248184 Equal | |
| _struct 4332938968 4332938968 Equal | |
| _signal 4330603288 4330603288 Equal | |
| posix 4330489880 4330489880 Equal | |
| multiprocessing 4332079208 4332079208 Equal | |
| errno 4330962680 4330962680 Equal | |
| abc 4330604568 4330604568 Equal | |
| sre_compile 4331693144 4331693144 Equal | |
| _lzma 4334098936 4334098936 Equal | |
| itertools 4332431464 4332431464 Equal | |
| selectors 4332999128 4332999128 Equal | |
| os.path 4331324024 4331324024 Equal | |
| enum 4332815208 4332815208 Equal | |
| sre_parse 4331694504 4331694504 Equal | |
| _osx_support 4331621656 4331621656 Equal | |
| tempfile 4332938888 4332938888 Equal | |
| _sysconfigdata 4331618536 4331618536 Equal | |
| re 4331692664 4331692664 Equal | |
| _weakrefset 4330605848 4330605848 Equal | |
| multiprocessing.util 4334216440 4334216440 Equal | |
| sysconfig 4331555400 4331555400 Equal | |
| encodings.aliases 4330631064 4330631064 Equal | |
| multiprocessing.process 4332853912 4332853912 Equal | |
| _pickle 4334621384 4334621384 Equal | |
| struct 4332938808 4332938808 Equal | |
| _compression 4334042232 4334042232 Equal | |
| signal 4332814408 4332814408 Equal | |
| select 4333002008 4333002008 Equal | |
| copy 4333976936 4333976936 Equal | |
| heapq 4332431384 4332431384 Equal | |
| marshal 4330489800 4330489800 Equal | |
| weakref 4332592568 4332592568 Equal | |
| encodings 4330534856 4330534856 Equal | |
| functools 4332332520 4332332520 Equal | |
| math 4333001928 4333001928 Equal | |
| warnings 4333307608 4333307608 Equal | |
| _multiprocessing 4334215800 4334215800 Equal | |
| bz2 4334041432 4334041432 Equal | |
| subprocess 4334624424 4334624424 Equal | |
| atexit 4334624264 4334624264 Equal | |
| _collections_abc 4331325544 4331325544 Equal | |
| pwd 4334039352 4334039352 Equal | |
| multiprocessing.popen_fork 4332882744 4332882744 Equal | |
| __main__ 4330534296 4330534296 Equal | |
| types 4332590728 4332590728 Equal | |
| zipimport 4330534696 4330534696 Equal | |
| codecs 4330535096 4330535096 Equal | |
| _weakref 4330321144 4330321144 Equal | |
| socket 4332938648 4332938648 Equal | |
| stat 4330962760 4330962760 Equal | |
| _codecs 4330630024 4330630024 Equal | |
| lzma 4334042072 4334042072 Equal | |
| tarfile 4333361736 4333361736 Equal | |
| threading 4332137752 4332137752 Equal | |
| fnmatch 4333361416 4333361416 Equal | |
| hashlib 4334152104 4334152104 Equal | |
| grp 4333977496 4333977496 Equal | |
| builtins 4330055144 4330055144 Equal | |
| _operator 4332430344 4332430344 Equal | |
| traceback 4332195656 4332195656 Equal | |
| pickle 4334217400 4334217400 Equal | |
| _socket 4332941128 4332941128 Equal | |
| copyreg 4331693864 4331693864 Equal | |
| _compat_pickle 4334549016 4334549016 Equal | |
| _hashlib 4334153144 4334153144 Equal | |
| collections.abc 4332593048 4332593048 Equal | |
| encodings.utf_8 4330602568 4330602568 Equal | |
| _locale 4330905256 4330905256 Equal | |
| multiprocessing.context 4332079368 4332079368 Equal | |
| posixpath 4331324024 4331324024 Equal | |
| encodings.latin_1 4330603528 4330603528 Equal | |
| tokenize 4332509768 4332509768 Equal | |
| multiprocessing.reduction 4334215960 4334215960 Equal | |
| _thread 4330321064 4330321064 Equal | |
| operator 4332334760 4332334760 Equal | |
| _frozen_importlib 4330245160 4330245160 Equal | |
| sys 4330126856 4330126856 Equal | |
| sre_constants 4331782616 4331782616 Equal | |
| _warnings 4330320264 4330320264 Equal | |
| multiprocessing.connection 4332135912 4332135912 Equal | |
| _bootlocale 4330905096 4330905096 Equal | |
| array 4334550456 4334550456 Equal |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Wow. Why are both processes using the same
sys.modules? Is this some sort of copy on write thing? Do they really share state?