2016-04-15 13 views
1

私は複数のサーバーで同時にいくつかのスクリプトを実行しようとしています。 サンプルコードです。並列処理用のPythonファブリック

server1 = "" 
server2 = "" 

env.parallel = True 

@task 
@hosts(server1) 
@parallel 
def run_shell1(): 
    run("sh shell1.sh") 

@task 
@hosts(server2) 
@parallel 
def run_shell2(): 
    run("sh shell2.sh") 

そして、私はこのような工場のコマンド実行:

fab run_shell1 run_shell2 

をしかし、私は、コードを実行したときに、私はこのようなエラーました:

pickle.PicklingError: Can't pickle <function inner at 0x0000000003280438>: it's 
not found as fabric.tasks.inner 

はまた、いくつか他のエラーがありましたがマルチプロセッシング/ process.pyとfabric/job_queue.pyなどに関するメッセージ

ファブリックのバージョンを確認しました.1 .11.1。

+0

これは完全なコードですか?私は生地の専門家ではありませんが、何かが欠落しているようです。 –

+0

はい、ほぼ完全なコードです。何が欠けている? –

+0

エラーメッセージに基づいて、ネストされたタスクや何かのような内部的な機能が期待されますが、 '@ parallel'と何か関係があります。 –

答えて

2

この問題に関連したファブリックの既知のバグがあります:

https://github.com/fabric/fabric/issues/489

より具体的には、説明のためにこれを参照してください。https://github.com/fabric/fabric/issues/489#issuecomment-4232091

要旨はそのためforking.Popen()の実装では、 Win32はマルチプロセッシング時に問題を引き起こしています。

ファブリック2.xで修正されると思います。

+0

うわー、2秒diff:私は私の答えを削除します。良いですね! –

+0

Hehe。あなたは私を持っています。 – nir0s