4

私はIPythonとリモートコントロールで遊んでいます:

in:  from IPython Import parallel as p
in:  rc=p.client(profile=myprofile)

の間には動作の違いがあります。

in:  rc[0].block
out: False
in:  rc[0].block=True
in:  rc[0].block
out: False

in:  view=rc[0]
in:  view.block
out: False
in:  view.block=True
in:  view.block
out: True

何を追加するのか本当に理解できませんか?何故ですか ?割り当ては何をしますか?

4

1 に答える 1

1

割り当て自体は何もしません。rcこれがあなたのクライアントです。、または任意の種類のインデックス作成を行うrc[0]と、[] で指定したエンジンを持つビューである DirectView オブジェクトが生成されて返されます。これは、ビューを生成するための省略形です。実際には、特定のオブジェクトを取得するだけではありません。

したがって、これらのビューは一意ではありません。それを説明する最良の方法は、例を挙げて説明することだと思います。2 つのエンジンがあるとします。エンジン 1 のみでいくつかのタスクを実行し、タスクをブロックしたいと考えています。エンジン 1 だけで他のものを実行したいが、それらをブロックしたくない。エンジン 1 と 2 でさらに実行する必要があり、それらをブロックしたくない場合。次に、次のことができます。

view_1_block = rc[0]
view_1_block.block = True
view_2_noblock = rc[0]
view_2_noblock.block = False
view_3_noblock = rc[[0,1]]
view_3_noblock.block = False

次に、これらを使用して、好きな方法でタスクを実行できます。

view_1_block.map(lambda x:x**10, range(32)) # blocks, returns results, runs only on 1
view_3_noblock.map(lambda x:x**10, range(32)) # does not block, returns AsyncResult, runs on 1 and 2

ここでは実際の魔法は使用されていません。rc[0] を 2 回実行すると、2 つのビューが生成されます。2 番目のビューは最初のビューと同じではありません。rc[0] を変数に割り当ててからその変数を使用すると、新しいビューを作成するのではなく、1 つのビューで作業することになります。

Numpy や Scipy と同様に、iPython には、必ずしも Python のイディオムに完全に適合するとは限らないかなりの数の簡略表記があります。これは特に [] と getitem の場合です。これを書くより純粋な Python の方法は、はるかに扱いにくい などを使用することrc.direct_view(1)です。これにより、これがアイテムを取得するだけでなく、実際にビューを作成していることを明確にすることができます。

于 2013-03-28T17:44:17.793 に答える