2012-12-19 3 views
2

이것은 곧 프로젝트로 바뀌는 일반적인 지식 문제입니다. 나는 알려진 소금으로 무술을 시도하는 스크립트를 가지고있다. 어쨌든이 적용에서 소금은 알려져 있습니다. 어쨌든, 스크립트는 잘 동작합니다. 파이썬 스크립트입니다. 내가 실행할 때, 내가 사용할 수있는 16 개의 코어 중 하나가 맨 위에 있습니다. 나는 무차별 공격을 위해 16 개의 코어를 모두 활용하고 싶습니다! 나는 스크립트를 조금 어지럽히고 여러 코어를 활용하기 위해 예제를 사용할 수 있었지만 전체적으로 사용되지는 않았습니다. 다중 처리? 멀티 스레딩? 풀? 열? brute forcing

http://forum.openopt.org/viewtopic.php?id=51

이 parrelization 물건

나에게 아주 새로운 그리고 난 (혼자 스크립팅 언어를하자) 파이썬에 접근하는 방법을 모르겠어요.

TL; DR, 해시에서 무차별 대용 암호를 사용할 수있는 모든 코어를 파이썬에서 사용하는 가장 좋은 방법은 무엇입니까?

은 기본적으로 제가 지금 가지고있는 것은 ...

from multiprocessing imports Pools 

def prog() 
    generate hash_attempt 
    compare it to target 
jobs = [] 
po = Pool() 
for stuff in things: 
    po.apply_sync(prog()) 

이 그냥 가끔 그런 다음 완전히 모든 코어를 사용하지 않고, 나는 내가 말한 생각처럼 만 작동하고,합니다 (의역 코드를 마음)이있다 무작위로 죽인다. 그것은 단지 실행을 멈추고 스크립트를 호출 한 터미널은 프롬프트로 돌아가고 "kill"이라고 말할 것입니다. 이상한 것들.

감사합니다.

+0

당신은 우리에게 실제 코드를 보여줄 필요가있다 – piokuc

+0

@piokuc 나는 내가 허락을 받아야할지 모르겠다. 나는 그것의 라이센스를 확인해야 할 것이다 ... (이것은 내가 바꿔서 말한 이유이다!) – 0xhughes

답변

8

글로벌 인터프리터 잠금으로 인해 CPU 바인딩 작업에 Python 스레드를 유용하게 사용할 수 없습니다. 이 경우 multiprocessing을 사용해야합니다. multiprocessing 자식 프로세스는 통신 오버 헤드로 인해 주어진 CPU 코어의 100 % 작동하지 않을 수 있습니다. 통신 오버 헤드를 최소화하려면 작은 청크가 아닌 큰 청크로 작업을 하위 프로세스에 할당하십시오.

+0

나는 해왔다. 인터넷 검색에서 우연히 마주 쳤던 다른 스레드의 GIL에 대해 읽었습니다. 그 중 아무 것도 정말로 내 응용 프로그램이 아니 었습니다. 멀티 프로세싱 모듈에 대해 더 자세히 알아보아야 할 것이다. @djc! – 0xhughes

+0

spot on djc;) 건배! – 0xhughes