2016-09-03 4 views
0

Ich habe folgende ‚Arbeitnehmer‘, die anfänglich ein einziges JSON-Objekt zurückgegeben, aber ich mag es mehr JSON-Objekte zurück:Valueerror: zu viele Werte Multi Pool auspacken

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] 

Dieser Arbeiter ist ein Parameter, für einen Multiprozessor-Pool:

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

wenn ich auf den Pool und den Arbeiter mit nur einem Ausgang (dh _cats) laufen, es funktioniert gut, aber wenn ich versuche, mehrere JSON zurückzukehren „Schemata“, erhalte ich die Fehler :

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

Wie kann ich zwei separate JSON-Objekte in data_worker zurückgeben? Ich brauche sie als separate JSON-Objekte. Beachten Sie, habe ich bereits versucht, die folgende, die nicht funktioniert hat:

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

Antwort

1

Zunächst einmal denke ich Sie, dies zu schreiben bedeutete:

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

Aber wie auch immer das wird nicht funktionieren, weil data_worker Renditen ein Paar, aber map() gibt eine Liste von allem zurück, was der Arbeiter zurückgibt. So sollten Sie das tun:

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

Dies wird Ihnen die zwei Listen, die Sie suchen.

Mit anderen Worten, Sie erwarteten ein Paar Listen, aber Sie haben eine Liste von Paaren.

Verwandte Themen