2016-09-03 9 views
0

私は当初、単一JSONオブジェクトを返し、次の「労働者」を持っていますが、私はそれが複数のJSONオブジェクトを返すしたいと思います:とValueError:マルチプロセッシングプールを展開するためにあまりにも多くの値

def data_worker(data): 
    _cats, index, total = data 
    _breeds = {} 

    try: 
     url = _channels['feedUrl'] 
     r = get(url, timeout=5) 
     rss = etree.XML(r.content) 

     tags = rss.xpath('//cats/item') 
     _cats['breeds'] = {} 
     for t in tags: 
      _cats['breeds']["".join(t.xpath('breed/@url'))] = True 
      _breeds['url'] = "".join(t.xpath('breed/@url')) 

     return [_cats, _breeds] 
    except: 
     return [_cats, _breeds] 

この労働者はパラメータであり、マルチプロセッシング・プール用:

cats, breeds = pool.map(data_worker, data, chunksize=1) 

私はただ一つの出力(すなわち_cats)をプールし、労働者を実行すると、それだけで正常に動作しますが、私は、複数のJSONを返すしようとすると、「スキーマを、」私はエラーを取得します:

File "crawl.py", line 111, in addFeedData 
    [cats, breeds] = pool.map(data_worker, data, chunksize=1) 
ValueError: too many values to unpack 

data_workerで2つの別々のJSONオブジェクトを返すにはどうすればよいですか?私はそれらを別々のJSONオブジェクトにする必要があります。 data_worker返すので、

cats, breeds = pool.map(data_worker, data, chunksize=1) 

しかし、いずれにせよ、これは動作しません:すべての

[cats, breeds] = pool.map(data_worker, data, chunksize=1) 
(cats, breeds) = pool.map(data_worker, data, chunksize=1) 
return (_cats, _breeds) 

答えて

1

まず、私はあなたがこれを書くためのものだと思う:注、私はすでに動作しませんでした以下を、試してみましたペアになりますが、map()は、ワーカーが返すもののリストを返します。だからこれを行う必要があります:

cats = [] 
breeds = [] 
for cat, breed in pool.map(data_worker, data, chunksize=1): 
    cats.append(cat) 
    breeds.append(breed) 

これは、あなたが求める2つのリストを提供します。

つまり、ペアのリストが必要ですが、ペアのリストがあります。

関連する問題