두 개의 스레드에서 동시에 실행되는 두 개의 함수가 있습니다. 두 함수 모두이 메서드를 PyObject_CallObject(pFunc,pArgs)
이라고 부르며 두 개의 다른 파이썬 함수를 실행합니다. 하지만 그렇게하려고하면 access violation reading location
예외가 발생합니다. 두 기능 모두에 사용 된 pFunc
과 pArgs
은 해당 기능에 대해 로컬이며 공유 된 데이터가 없습니다. 아직도 나는 예외를 얻는가?두 개의 다른 스레드에서 PyObject_CallObject()를 동시에 실행하는 방법은 무엇입니까?
2
A
답변
2
그건 불가능합니다. 은 파이썬 CAPI 함수를 호출하기 전에 전역 인터프리터 잠금 (GIL)을 획득해야합니다. GIL없이 호출 할 수있는 몇 가지 기능 만 있습니다.
https://docs.python.org/2/c-api/init.html#thread-state-and-the-global-interpreter-lock
파이썬 인터프리터는 스레드에 안전하지 않습니다. 멀티 쓰레드 파이썬 프로그램을 지원하기 위해서 파이썬 객체에 안전하게 접근하기 전에 현재 쓰레드에 의해 유지되어야하는 전역 인터프리터 잠금 또는 GIL이라고하는 전역 잠금이 있습니다. 잠금이 없으면 가장 단순한 작업조차도 멀티 스레드 프로그램에서 문제를 일으킬 수 있습니다. 예를 들어 두 스레드가 동시에 동일한 오브젝트의 참조 횟수를 증가 시키면 참조 횟수가 두 번 증가하는 대신 한 번만 증가 할 수 있습니다.
관련 문제
- 1. 두 개의 루프를 동시에 실행하는 방법은 무엇입니까?
- 2. UI 스레드에서 두 개의 다른 컨트롤을 동시에 조작하는 방법은 무엇입니까?
- 3. 동시에 두 개의 다른 프로세스를 실행하는 방법은 무엇입니까?
- 4. 객관적인 C에서 두 개의 다중 스레드를 동시에 실행하는 방법은 무엇입니까?
- 5. 실제 다른 스레드에서 두 개의 JavaFX UI를 실행하는 방법
- 6. 두 개의 gcd 대기열을 별도의 스레드에서 실행하는 방법은 무엇입니까?
- 7. 쉘 스크립트에서 두 개의 명령을 동시에 실행하는 방법은 무엇입니까?
- 8. VB에서 동시에 두 개의 쿼리를 실행하는 방법은 무엇입니까? (MySql)
- 9. Grove Pi에 대해 동시에 두 개의 스크립트를 실행하는 방법은 무엇입니까?
- 10. 두 개의 다른 스레드에서 동시에 IO (직렬 포트)에 액세스
- 11. Java의 두 개의 다른 스레드에서 동시에 변수에 액세스
- 12. 안드로이드에서 다른 스레드에서 메소드를 실행하는 방법은 무엇입니까?
- 13. @test 주석 두 개를 두 시스템에서 동시에 실행하는 방법은 무엇입니까?
- 14. 동시에 두 개의 함수를 실행하는 방법
- 15. 두 개의 JFrame을 동시에 여는 방법은 무엇입니까?
- 16. 두 개의 AudioQueue를 동시에 실행하는 Core Audio
- 17. 다음 코드에 대해 두 개의 다른 스레드에서 ActionListenters를 실행하는 방법
- 18. 두 개의 컬렉션을 동시에 쿼리하는 방법은 무엇입니까?
- 19. 두 개의 다른 .xml 파일을 동시에 구문 분석하는 방법은 무엇입니까?
- 20. 두 개의 다른 스레드에서 두 개의 NSManagedObjectContext를 동시에 저장할 수 있습니까?
- 21. 두 개의 서로 다른 AsyncTasks가 동시에 실행됩니다.
- 22. 두 개의 무한 루프를 동시에 실행하는 동시에 변수를 변경하는 방법은 무엇입니까?
- 23. 다른 스레드에서 양식을 실행하는
- 24. 두 개의 다른 포트에서 수신 대기하는 두 개의 Java 소켓 서버 인스턴스를 실행하는 방법은 무엇입니까?
- 25. 셀레늄 테스트 케이스를 두 개의 다른 노드에서 실행하는 방법은 무엇입니까?
- 26. 두 레코드를 동시에 두 개의 데이터베이스 테이블에 삽입하는 방법은 무엇입니까?
- 27. 두 개의 포트 또는 스레드에서 플라스크를 실행하는 방법
- 28. RDP를 동시에 수행하고 동일한 예약 된 작업을 2 개의 다른 세션에서 동시에 실행하는 방법은 무엇입니까?
- 29. 동시에 두 개의 Pakyow 서버
- 30. 두 개의 스레드에서 Window 컨트롤을 동시에 사용할 수 없습니다.