파이썬 사전이 있고 여러 스레드가 추가되어있는 경우 모든 스레드가 자체 키에 추가한다는 것을 알고있는 경우 요소 추가를 동기화해야합니까? (내 말은 동일한 키에 대한 추가가 동시에 발생할 수 없다는 뜻입니다).파이썬 사전에 동기화가 필요합니까?
답변
키가 스레드 당 고유하지 않은 경우 사전 개체에 대한 액세스를 동기화해야 할 수도 있습니다. 액세스가 반드시 스레드로부터 안전하지는 않습니다.
언제든지 dis
(disassembler) module을 사용하여 파이썬 코드를 확인할 수 있습니다. 파이썬 스레드 컨텍스트는 임의의 opcode (opcode 자체는 원자 적으로 실행 됨)간에 전환 할 수 있습니다. 사전인가에 대한 접근은 여러 옵 코드를 통해 확산 될 수 있습니다
>>> def foo():
... somedict = {}
... somedict['bar'] = 'spam'
...
>>> import dis
>>> dis.dis(foo)
2 0 BUILD_MAP 0
3 STORE_FAST 0 (somedict)
3 6 LOAD_CONST 1 ('spam')
9 LOAD_FAST 0 (somedict)
12 LOAD_CONST 2 ('bar')
15 STORE_SUBSCR
16 LOAD_CONST 0 (None)
19 RETURN_VALUE
somedict['bar'] = spam
라인과 관련된 4 옵 코드,는 somedict
참조를 로딩 'bar'
및 'spam'
상수를로드 및 저장 작업을 호출이 있습니다. 스레드 컨텍스트는 이러한 opcode간에 전환 할 수 있습니다.
즉, 키가 스레드마다 고유 한 것이 보장되면 구조를 잠그지 않고 도망 갈 수 있습니다. 모든 opcode와 마찬가지로 STORE_SUBSCR
opcode는 GIL에서 파이썬 인터프리터에 의해 실행되므로 에 저장하고 정보를 읽는 다중 스레드이 안전해야합니다.
Python 표준 라이브러리 라이브러리는 몇 가지 위치에서이 작업을 수행합니다. 사전에 스레드 별 정보를 저장하기위한 사전 키로 thread.thread_ident()
을 사용합니다. 예를 들어, threading
module은 _active
모듈 - 전역 사전을 스레드 식별자로 유지합니다.
'STORE_SUBSCR' 연산 코드가 반드시 원자적일 필요는 없다. 이미 존재하는 키를 덮어 쓰고, 키나 덮어 쓰여진 값이'__del__'을 사용하거나 그럴 경우) 객체가 해제 될 때 스레드 전환을 얻을 수 있습니다. 실제로 이것은 문제가되지는 않지만 명시 적 잠금을 피하기 위해 GIL을 활용하려고 할 때 기억해야 할 가치가 있습니다. – Duncan
- 1. 동기화가 필요합니까?
- 2. 여기서 동기화가 필요합니까?
- 3. onSensorChanged (...)에 동기화가 필요합니까?
- 4. 명시 적 동기화가 필요합니까?
- 5. ActiveX 컨트롤에 스레드 동기화가 필요합니까?
- 6. 다음과 같은 상황에서 동기화가 필요합니까?
- 7. FinalConstruct()/FinalRelease() 내부에 동기화가 필요합니까?
- 8. 단방향 패킷 지연 측정 : 모든 동기화가 필요합니까?
- 9. 이 코드에는 어떤 종류의 동기화가 필요합니까?
- 10. 복제본의 mongodb 노드가 시간 동기화가 필요합니까?
- 11. 개체가 여러 스레드에 의해서만 읽혀지며 동기화가 필요합니까?
- 12. 자바에서 정적 메소드에 동시 액세스하려면 동기화가 필요합니까?
- 13. ehcache를 사용할 때 어떤 동기화가 필요합니까?
- 14. ApplicationScoped Bean에서 RequestContext에 액세스하려면 동기화가 필요합니까?
- 15. 멀티 스레드 GAE 애플리케이션에 동기화가 필요합니까?
- 16. JPA 엔티티의 일시적인 필드에서 동시 동기화가 필요합니까?
- 17. 파이썬 사전의 사전에 액세스
- 18. 사전에 파이썬 목록 표시
- 19. 파이썬 사전에 액세스하는 방법
- 20. 사전에 파이썬 목록
- 21. 조건부 키 - 사전에 파이썬
- 22. 사전에 대한 파이썬 split()
- 23. 사전에 파이썬 업데이트 사전
- 24. 사전에 목록을 변환 (파이썬)
- 25. 사전에 파일을 읽는 파이썬
- 26. 사전에 파이썬 오류가 있습니다.
- 27. 트윗을 파이썬 사전에 저장하십시오.
- 28. 사전 사전에 파이썬!
- 29. 파이썬 사전에 복수 할당
- 30. 사전에 단어 계산하기 (파이썬)
가능한 복제본 http://stackoverflow.com/questions/3358770/python-dictionary-is-thread-safe – shx2
나는 그것이 중복이라고 생각하지 않습니다. – coredump
당신 말이 맞아요. 하지만 그것은 http://stackoverflow.com/questions/6953351/thread-safety-in-pythons-dictionary – shx2