2017-06-28 12 views
-1

URLのリストを反復しようとしていますが、出力は行単位ではなく文字単位です。マルチプロセッシングなしで実行すると、完璧に動作します。しかし、私がマルチプロセスしようとすると、それは文字ごとに読み始めます。どうしてこれなの?Python - Iteratorは行単位ではなく文字単位で処理されます(マルチプロセッシングの場合)

私は1行ずつ読む方法を広く読んできました。私はそれを正しく行っているように見えます。どこが間違っていますか?マルチプロセッシングなしでも完璧に動作します。

import urllib.request 
import urllib.error 
import multiprocessing 

def findAdmin(URLList): 
    # Loops through links 
    for link in URLList: 
     print (link) 

# Multi-processing worker 
def mp_worker(URLList): 
    findAdmin(URLList) 

# Multi-processing handler 
def mp_handler(URLList): 
    p = multiprocessing.Pool(2) 
    p.map(mp_worker, URLList) 


if __name__ == '__main__': 
    URLList = open('sites.txt','r') 
    mp_handler(URLList) 
    ## When running just findAdmin(URLList), the program works flawlessly. 
    # findAdmin(URLList) 

私はマルチプロセッシングに関して何か間違っていなければなりません。しかし、私はそれが何であるか把握できません。どんな助けでも大歓迎です!

+0

'p.map(mp_worker、URLList)' '全体ではなくURLList'で、労働者の引数として* URLList''の各*要素でプールにジョブを送信しますfindAdminがに変更します。また、それはリストではありません。 – user2357112

+0

これはファイルであり、各要素で読み取ろうとしています。今、私は分かる。 ソリューションをどのようにコードすることができますか? – YoshiBMF

答えて

0

.map()実行mp_workerのURLListのエントリ - forループは不要です。

def findAdmin(URLList): 
    print (link) 
+0

助けてくれてありがとうが、私はちょうどこれを試みた - と同じ問題が発生します。 何も変更されていないようです。 – YoshiBMF

+0

updateを参照してください。 'map'を使用しているときには、foorループは不要です。 –

+0

これが解決策です。助けてくれてありがとう。 – YoshiBMF

関連する問題