-1

내 프로젝트에서 argprse를 사용하여 인수를 전달하고 스크립트의 어딘가에서 다중 처리를 사용하여 나머지 계산을 수행합니다. 명령 프롬프트에서 호출하면 스크립트가 정상적으로 작동 함 예.Python 다중 처리가 argparse 및 pyinstaller에서 오류를 throw합니다.

"python complete_script.py --arg1=xy --arg2=yz".

그러나 "complete_script.py --onefile pyInstaller 중에"명령을 사용하여 pyInstaller 중에를 사용하여 EXE 파일로 변환 후 오류

" error: unrecognized arguments: --multiprocessing-fork 1448"

내가이 일을 할 수있는 방법을 어떤 제안

가 발생합니다. 또는 다른 대안. 내 목표는 Python이 설치되지 않은 다른 시스템에서 호출 할 수있는 exe 응용 프로그램을 만드는 것입니다.

Platform: Windows 10 
Python : 2.7.13 <installed using Anaconda> 
multiprocessing : 0.70a1 
argparse: 1.1 

코멘트에서 복사 : 여기

내 워크 스테이션의 세부 사항입니다

def main(): 
    main_parser = argparse.ArgumentParser() 
    < added up arguments here> 
    all_inputs = main_parser.parse_args() 
    wrap_function(all_inputs) 


def wrap_function(all_inputs): 
    <Some calculation here > 
    distribute_function(<input array for multiprocessing>) 

def distribute_function(<input array>): 
    pool = Pool(process = cpu_count) 
    jobs = [pool.apply_async(target_functions, args = (i,) for i in input_array)] 
    pool.close() 

답변

0

내가 명백한을 설명 할 수있다, 그러나 당신은 우리에게 많은 정보를 제공하지 않습니다 작업.

python complete_script.py --arg1=xy --arg2=yz 

호출 이런 종류의 당신의 parser 적어도이 2 인자 '--arg1'와 '--arg2'로 플래그 사람을 받아들이는 설정이 있음을 알려줍니다. 아마도 멀티 코드에 의해 생성

--multiprocessing-fork 1448 

:

오류는이 파서 (아니면 다른)도이 문자열을 보는 것을 알려줍니다. usage 오류의 일부를 보니 어떤 파서가 불평하는지 확인하는 것이 좋습니다.

파이썬에 대한 첫 번째 오픈 소스 기여 중 하나는 Windows에서 다중 처리에 대한 경고를 강화하는 것이 었습니다.

https://docs.python.org/2/library/multiprocessing.html#windows

은 파서는 if __name__ 블록에 의해 보호 받고 있는가? 포크에서 실행될 때이 특정 구문 분석기를 호출해야합니까? 독립 실행 형 스크립트로 프로그램을 호출 할 때 파서가 작동하도록 설계 한 것 같습니다. 그러나 그것이 수입 될 때 언제 일어나는가? 추가

When using the multiprocessing module, you must call

multiprocessing.freeze_support()

straight after the if __name__ == '__main__': line of the main module.

Please read the Python library manual about multiprocessing.freeze_support for more information.

:

+0

이 힘 유용한 정보가 작동하려면 : [ '코드'] 데프 주() : main_parser = argparse.ArgumentParser() <까지 추가 인수 여기> all_inputs = main_parser.경우 parse_args() wrap_function (all_inputs) 데프 wrap_function (all_inputs) <몇 가지 계산> distribute_function (<멀티 프로세싱을위한 입력 배열>) 데프 distribute_function () 풀 = 풀 (프로세스 = CPU_COUNT) jobs = [pool.apply_async (input_array의 i에 대한 target_functions, args = (i))] pool.close() [ 'code'] –

+0

'메인'은 언제 호출됩니까? 임포트시 또는'is __name __... '블록에 의해서만? – hpaulj

+0

main()이 __name__ == '__main__'블록에 의해 호출되었습니다. –

1
(A 조금 늦게하지만 미래에 다른 사람이 유용 할 수 있습니다 ...)

나는 상태가 내가 this multiprocessing pyInstaller recipe을 발견 몇 가지 조사 후, 동일한 문제가 있었다 그 코드 라인이 나를 위해 문제를 해결했습니다.