-1

私のプロジェクトでは、argprseを使用して引数を渡しています。スクリプトのどこかで、マルチプロセッシングを使って残りの計算を行っています。コマンドプロンプトから呼び出すと、スクリプトは正常に動作しています ex。 "python complete_script.py --arg1=xy --arg2=yz"。Pythonマルチプロセッシングでargparseとpyinstallerでエラーが発生する

しかし、コマンドを使用してpyInstallerのを使用してexeファイルに変換した後、 "pyInstallerの--onefile complete_script.py" それは

エラー

" 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

のために働くかもしれないこの便利な情報: [ 'コード'] DEFメイン(): 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(target_functions、args =(i、input_arrayのi))] pool.close['code'] –

+0

「main」はいつ呼び出されますか?インポート時または 'is __name __... 'ブロックのみで – hpaulj

+0

main()は__name__ == '__main__'ブロックによって呼び出されます –

1
(少し遅れていますが、将来的には他の誰かのために役立つことができます...)

は私が述べている私はthis multiprocessing pyInstaller recipeを発見したいくつかの研究の後、同じ問題を抱えていましたそのコード行が私の問題を解決しました。

関連する問題