Python 스크립트를 여러 번 병렬로 실행해야 하는데 이렇게 백그라운드에서 실행했습니다.
ipython program.py & ipython program.py & ...
이 방법이 실행당 하나의 코어를 사용하는지 아니면 스레드를 사용하여 program.py를 실행하는지 궁금합니다. 그런데 저는 GNU Parallel의 사용법을 알아보고 싶었지만 제가 찾은 예는 "find"에 대한 "cat"과 같은 명령에 대한 것이었습니다. GNU Parallel을 사용하여 매번 다른 코어에서 동시에 program.py를 실행하는 방법은 무엇입니까? 당신의 도움을 주셔서 감사합니다.
답변1
GNU Parallel을 사용하여 매번 다른 코어에서 동시에 program.py를 실행하는 방법은 무엇입니까?
당신은 (거의) 프로그램을 코어에 묶고 싶지 않습니다. 일반적으로 어떤 코어가 작업을 수행하는지 신경 쓰지 않습니다. 일반적으로 시스템의 각 CPU 스레드에 대해 하나의 작업만 실행하려고 합니다.
그리고저것GNU Parallel을 사용하면 쉽습니다.
seq 1000 | parallel ipython program.py
이것은 실행되지만 ipython program.py 1
CPU ipython program.py 1000
스레드당 하나의 작업만 병렬로 실행됩니다. 따라서 하이퍼스레딩(즉, 16개의 CPU 스레드)을 사용하는 8코어 시스템에서는 16개의 작업을 병렬로 시작합니다.
이 내용은 2장에서 다룹니다.https://doi.org/10.5281/zenodo.114601415분 정도 시간을 내어 읽어보시길 권합니다. 당신의 명령줄은 당신을 좋아할 것입니다.
답변2
이 방법이 실행당 하나의 코어를 사용하는지 알고 싶습니다.
아니요, 반드시 그런 것은 아닙니다.
아니면 스레드를 사용하여 program.py를 실행하세요.
아니요, 이건 별개예요프로세스, 아니요실. 스레드는 동일하거나 다른 코어에서 예약될 수도 있습니다.
그래서 일부 용어를 혼동하신 것 같습니다.
프로세스를 시작할 때 운영 체제는 무엇을 합니까?일정즉, 사용 가능한 CPU 코어가 있을 때 유휴 CPU 코어에서 실행된다는 의미입니다. 이것은 매우 영리하므로 서로 다른 Python 프로세스가 서로 다른 코어에서 실행될 가능성이 있지만 반드시 그런 것은 아닙니다(코어가 1개만 있는 경우에도 잘 작동합니다!).
GNU Parallel을 사용하여 매번 다른 코어에서 동시에 program.py를 실행하는 방법은 무엇입니까?
전혀 그렇지 않습니다. 이는 다중 프로세서 스케줄링이 작동하는 방식이 아니며(코어 고정과 같은 트릭을 거치지 않고) 아마 이점도 없을 것입니다. 프로그램이 호출하는 방식대로 CPU 코어를 아직 완전히 활용하지 않는 경우 GNU의 유사한 Nothing은 그거 바꾸세요. 모든 코어가 자동으로 사용되지 않으면 프로세스가 경쟁하고 있음을 의미합니다.다른CPU 시간보다 더 많은 리소스.
예를 들어, ipython(실제로 대화형으로 실행하지 않는 한 필요하지 않은 많은 Python 모듈을 로드하고 실행한 이후에는 실행할 수 없는)을 사용하는 것처럼 보이기 때문에 상대적으로 스토리지 대역폭 집약적일 가능성이 높습니다. 병렬로) 대신 일반 Python을 사용합니다.
일반적으로 GNU는 parallel
다소 투박하다고 생각합니다. 즉, 사용하기가 불필요하게 어렵습니다. 나는 이것이 3개의 프로세스(,, 및)를 병렬로 시작하는 echo argument1 argument2 argument3 | xargs -P0 -n1 python script.py
더 쉬운 방법 이라는 것을 알았습니다.python script.py argument1
python script.py argument2
python script.py argument3