multithreading - thread safe python dictionaries? -


i have function call starts 10 threads. before start of these threads , have

from collections import defaultdict output = defaultdict(dict) 

and output empty.

each thread generate data write dictionary.

something like:

output['water'] = 'h20' output['fire'] = 'delta of oxygen' .... 

the threads add items , not iterate on of other items or modify other items. output['water'] being item different output['fire']. can guarantee no 2 threads going create same item. is, each thread t has unique i. in code: output[i] unique per thread.

is dictionary thread safe in regard?

yes.

if using cpython , strings keys, yes. gil in cpython ensures 1 thread executes bytecode @ time, , setting key value in dict happens in single opcode, store_subscr. if not using cpython, or using key has custom __hash__, __eq__, or __cmp__ methods, bets off. if had soapbox, i'd hop on , warn of evils of relying on implementation details correctness. it's more pythonic of write works case , in environment used, since doing otherwise seen premature optimization. enjoy working code!

>>> dis import dis >>> dis(compile('output = defaultdict(dict); output["water"] = "h2o"', 'example', 'exec'))   1           0 load_name                0 (defaultdict)               3 load_name                1 (dict)               6 call_function            1 (1 positional, 0 keyword pair)               9 store_name               2 (output)              12 load_const               0 ('h2o')              15 load_name                2 (output)              18 load_const               1 ('water')              21 store_subscr              22 load_const               2 (none)              25 return_value 

this has been discussed elsewhere.


Comments

Popular posts from this blog

curl - PHP fsockopen help required -

HTTP/1.0 407 Proxy Authentication Required PHP -

c# - Resource not found error -