我还没有在Python中使用线程,并且把这个问题当作一个完全陌生的人。是collections.defaultdict线程安全的?
我想知道如果defaultdict
是线程安全的。让我来解释一下:
我
d = defaultdict(list)
它创建默认情况下为丢失的钥匙列表。比方说,我有多个线程开始在同一时间做这个:
d['key'].append('value')
最后,我应该用['value', 'value']
结束了。但是,如果defaultdict
是不是线程安全的,如果线程1个收益率线程2检查if 'key' in dict
后d['key'] = default_factory()
之前,就会造成交织和其他线程将在d['key']
创建列表和追加'value'
可能。
然后当线程1再次执行时,它会继续从d['key'] = default_factory()
这将破坏现有的列表和价值,我们将在['key']
结束。
我看着CPython source code for defaultdict。但是,我找不到任何锁或互斥锁。我想这是不是线程安全的,只要它被记录如此。
一些人在IRC上说昨晚有GIL Python的,所以它是概念线程安全的。有人说线程不应该在Python中完成。我很困惑。想法?
https://groups.google.com/forum/#!topic/comp.lang。python/9ZnBQrYun1w可能会帮助 – 2013-07-16 16:52:40