回答編集履歴

1 型の間違いを修正

quiqui

quiqui score 4470

2017/07/26 09:50  投稿

スレッドじゃなくてプロセスだとは思いますが「プロセスが増えている」ことはなんの保証にもなりません。何もしていないプロセスが待機しているだけなのでしょう。
これを実行するとわかります。1つのプロセスだけ60秒sleepする処理が実行されるけれども、他の9プロセスは**存在するけれども正真正銘何もしていない**です。
```
import time
from multiprocessing import Pool
def wait(sec):
   print('wait executed')
   time.sleep(sec)
def main():
   Pool(10).map(wait, [60])
if __name__ == "__main__":
   main()
```
```
   f = open("/Users//Dropbox/prg/dataset/word0_notuseful012.txt")
   for row in f:
       word0.append(row.split("]["))
```
でrowに行を読みこみますね。
```
for i in word0[0]:
       word.append(str(i).replace("[","").replace("]","").replace(",","").replace("'","").replace("\"","").split())
```
で**1行目**を`row.split("][")`した**結果**の分、ループしていますね。
word.appendは1回しかやっていないので、wordの要素数は「1行目を`row.split("][")`した結果」の個数に等しいです。
それを`Pool.map`に渡していますから、「1行目を`row.split("][")`した結果」が1つより多ければ複数プロセスで回りますが、そうでなければプロセスは1つだけ実行されていて、他のプロセスは待機しているだけですね。
ところで、wordは「strを要素にしたlist」のlistですね。(型アノテーション的に書くと`List[List[str]str]`)
ところで、wordは「strを要素にしたlist」のlistですね。(型アノテーション的に書くと`List[List[str]]`)
だから
```
def subcalc(word):
```
に渡るwordは「strを要素にしたlist」なのでドキュメント1個分の情報しかないように見えます。
これではidfは計算しできない(しても意味が無い)ですね。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る