내 Windows 상자에서 방대한 데이터 처리를 수행하는 단일 스레드 파이썬 프로그램을 실행하고 있습니다. 내 컴퓨터에는 8 개의 프로세서가 있습니다. Windows 작업 관리자에서 성능 탭의 CPU 사용량을 모니터링 할 때 사용할 수있는 처리 능력의 극히 일부만 사용하고 있음을 나타냅니다. 하나의 프로세서 만 사용하고 나머지는 거의 유휴 상태입니다. 내 프로세서를 모두 사용하려면 어떻게해야합니까? 멀티 스레드는 솔루션입니까?컴퓨터의 모든 프로세서를 사용하기 위해 프로그래밍하는 방법은 무엇입니까?
답변
멀티 스레딩에서는 추가 프로세서 나 코어를 사용할 수 없습니다.
새 스레드 대신 새 프로세스를 생성해야합니다.
이 도구는 내가 건너 온 모든 중 가장 간단한 지금까지 : parallel python
개요 :
PP는 SMP에 파이썬 코드의 병렬 실행을위한 메커니즘을 제공 파이썬 모듈입니다 (다중 프로세서 시스템 또는 코어) 및 클러스터 (네트워크를 통해 연결된 컴퓨터 ).
다른 파이썬 소프트웨어와 설치하고 통합하기가 쉽습니다.
PP는
나는 내 대답을 간소화했다. 컨텍스트는 물론 파이썬으로 코딩하기 때문에 여러분과 다른 사람들이 언급 한 제한이 있습니다. – kakarukeys
병렬 처리 라이브러리를 언급 한 +1 – invert
@Forest : http://us.pycon.org/2010/conference/schedule/event/76/을 검토하고 공통적으로 보유하고있는 (일반적으로 잘못된) 지혜를 재고해야합니다. 일부 스레딩 GIL을 사용해도 효율적일 수 있습니다. GIL은 당신이 이론을 상상할 수있는 것을 무시한 정말로 드문 실용적인 효과를 가지고 있습니다. –
이 병렬 처리 가능하다고 가정하면 예, 스레딩은 확실히 해결책입니다. 특히 처리 할 데이터 항목이 많지만 모두 처리 할 수있는 경우 독자적으로 병렬 처리하는 것이 상대적으로 쉽습니다.
다중 스레드 대신 여러 프로세스를 사용하는 것 다른 해결책이 될 수 있습니다.
단일 프로세스에는 다중 스레딩이 필요하지만 반드시 솔루션 일 필요는 없습니다. 프로세서 동질성은 모든 스레드를 사용할 수있는 충분한 스레드가 있더라도 사용 가능한 코어의 하위 집합으로 제한 할 수 있습니다.
당신은 정말로 "해결책이 아닙니다"또는 "해결책이 아닐 수도 있습니다"라는 뜻입니까? 프로세서 친 화성 *이 분명히 문제가됩니까? –
@Jon : 업데이트되었습니다. –
대단히 감사합니다. 훨씬 더 의미가 있습니다. 파이썬 내에 문제를 일으킬 수있는 핸디캡이 있는지 궁금 해서요. –
당신은 당신의 프로그램이 형태의 경우 python's multiprocessing module
멀티는 그것이있다 파이썬 코드와 그 모든 코어를 사용하는 것이 가능하도록 GIL 문제를 방지 여러 파이썬 프로세스를 사용하여 혜택을 누릴 것이라고 것을 얻을 수 있습니다 쉽게 나사지도 더 복잡한 방식
는 파이썬 평행 유사하지만, 로컬 머신에 제한 파이썬 2.6 이상 포함되고, 파이썬가 가산 같이
답변을 확장하십시오. 네가하는 말을 이해하지 못한다. – invert
스레딩에 비유 비슷위한 기초 존이 말한 것, 당신이 표준 파이썬 인터프리터에서는 멀티 스레딩과 관련된 한계를 이해해야합니다. 쓰레드가 순수 파이썬이고 시스템 호출을하지 않으면 Global Interpreter Lock 때문에 여러 프로세서에서 동시에 실행할 수 없으므로 멀티 스레딩의 이점은 최소화됩니다. 이 경우 전역 인터프리터 잠금 기능이없는 JPython 또는 IronPython과 같은 다른 Python 구현으로 전환하거나 여러 프로세스를 사용하는 것이 좋습니다.
이렇게 순수 Python으로 작성된 오픈 소스와 크로스 플랫폼 모듈입니다.
단계별 또는 단계별로 작업을 분할하십시오. 각 단계는 무언가를 읽고 전체 계산의 일부를 수행하며 무언가를 씁니다.
"""Some Step."""
import json
for some_line in sys.stdin:
object= json.loads(some_line)
# process the object
json.dump(result, sys.stdout)
이와 비슷한 것이 좋습니다.
전달해야 할 개체가 여러 개인 경우 개체의 간단한 사전을 만드십시오.
results = { 'a': a, 'b': b }
이와 같이 파이프 라인에 연결하십시오.
python step1.py | python step2.py | python step3.py >output_file.dat
8 단계 이상으로 문제를 해결할 수있는 경우 8 개 이상의 코어를 사용합니다. 그리고, BTW, 이것은 아주 작은 실제 작업을 위해 엄청나게 빠를 것입니다.
- 1. 플러그인을 프로그래밍하는 방법은 무엇입니까?
- 2. 다른 테이블에 행을 삽입하기 위해 MySQL 트리거를 프로그래밍하는 방법은 무엇입니까?
- 3. 포럼 스레드를 프로그래밍하는 방법은 무엇입니까?
- 4. 음성 모뎀을 프로그래밍하는 방법은 무엇입니까?
- 5. 도메인에서 주어진 컴퓨터의 관리자를 확인하는 방법은 무엇입니까?
- 6. DS-5 유선을 사용하기 위해 Android 커널을 만드는 방법은 무엇입니까?
- 7. Adobe AIR 프로그램이 사용자 컴퓨터의 모든 이미지를 인덱싱하는 방법은 무엇입니까?
- 8. 모든 컴퓨터의 네트워크 속도를 제한하십시오.
- 9. Windows/Delphi에서 플러그인을 프로그래밍하는 방법은 무엇입니까?
- 10. 이더넷을 통해 RS232를 프로그래밍하는 방법은 무엇입니까?
- 11. Outlook과 함께 작동하도록 Excel을 프로그래밍하는 방법은 무엇입니까?
- 12. 동굴에서 프로그래밍하는 동안 햇빛을 소비하는 방법은 무엇입니까?
- 13. 얼굴 변환 프로그램을 프로그래밍하는 방법은 무엇입니까?
- 14. 파이썬은 모든 프로세서를 스레드 모드로 사용합니까?
- 15. 셸에서 모든 Google 워드 프로세서를 다운로드하는 방법
- 16. IronPython을 .NET 3.5 프로젝트에서 사용하기 위해 컴파일하는 방법은 무엇입니까?
- 17. 상업적으로 사용하기 위해 PHP 스크립트를 "닫는"방법은 무엇입니까?
- 18. 가능한 모든 문자열 조합을 찾는 방법은 무엇입니까? CUDA 사용하기
- 19. nsObject ASIHTTPRequests를 사용하기 위해
- 20. C# 인터페이스를 사용하기 위해 외부 COM 개체에 전달하는 방법은 무엇입니까?
- 21. DateField에서 사용하기 위해 J2ME에서 내일의 날짜를 결정하는 방법은 무엇입니까?
- 22. Firefox 확장 프로그램에서 사용하기 위해 Tab에 변수를 저장하는 방법은 무엇입니까?
- 23. RSACryptoServiceProvider에서 사용하기 위해 컴퓨터에 RSA 키를 만드는 방법은 무엇입니까?
- 24. SCRUM을 단독으로 사용하기 위해 구현 한 방법은 무엇입니까?
- 25. ASP.NET에서 사용하기 위해 Ext JS를 배우는 가장 좋은 방법은 무엇입니까?
- 26. Windsor를 사용하기 위해 서비스를 올바르게 구성하는 방법은 무엇입니까?
- 27. 다른 앱에서 사용하기 위해 클래스를 패키지화하는 가장 좋은 방법은 무엇입니까?
- 28. JavaMail과 함께 사용하기 위해 메일 서버를 구성하는 방법은 무엇입니까?
- 29. 데이터 테이블을 다시 사용하기 위해 캐시에 저장하는 방법은 무엇입니까?
- 30. "AccessoryButtonTapped ..."메서드에서 사용하기 위해 UITableCell에서 객체를 전달하는 방법은 무엇입니까?
예 멀티 스레딩이 필요합니다. – cspolton
그러나 프로그램에 대한 설명이 없으면 –
멀티 스레딩이 필요하지 않은지 여부를 말할 수 없습니다. –