0

私のdaskプログラムが出力を生成しない理由は混乱しています。私はスレッドの代わりにプロセスを使用するように指定しましたが、送信時にすべてのコアが起動する(ここで示唆されているように:dask computation not executing in parallel)ので、計算されているように見えますが終了しません。私は長いテキストファイルのリストの上に単純な正規表現を実行しようとしています。私は明白な何かを欠いていますかPythonのdaskプログラムが計算しているように見えても出力を生成できない

import re 
from os import listdir 

import dask.bag as db 
import dask.multiprocessing 
dask.set_options(get=dask.multiprocessing.get) 


loc = 'D:\\...\\text_files\\' 
txts = [loc + i for i in listdir(loc)[:10]] 

# Load data in parallel 
f = db.from_filenames(txts) 
f = f.repartition(3) 

# Define the regex 
regex = re.compile(r'\b[A-Z][a-z]+\b') 

# create function to parallelize 
def reg(text): 
    return regex.findall(text) 

# distribute the function over cores 
output = f.map(reg).compute().concat() 
+0

呼び出しが再パーティションするのはなぜ:あなたは、おそらく次の2行を入れ替えたいですか? – MRocklin

+0

私は教えてください...投稿されたソースのどの部分が出力を生成するはずですか?最後の行の後に 'print output'が足りないだけではありませんか? – Alfe

+0

PARTITION:デフォルトのパーティション方法は100です。私は3つのスレッドを利用したかったので、スレッドとパーティションをどのように位置合わせできるかを考えました。スレッド化されたパーティションをさらに作成することは理にかなっていますか?おそらくロードバランシングのハックですか?印刷:いいえ、私は印刷しようとしましたが、.compute()メソッドを呼び出してもプログラムは完了しません。 –

答えて

0

つの提案:

  1. repartitionにコールをドロップします。これは、データをインスタンス化し、それをプロセス間で移動しようとします。これは一般的に高価です。システムによって提供されるデフォルトを信頼する必要があります。あなたがコアを持っているだけ多くのプロセスを使用します。

  2. .compute()は計算の最後にのみ呼び出してください。

    output = f.map(reg).compute().concat() # before 
    output = f.map(reg).concat().compute() # after 
    
関連する問題