Gibt es in multiprocessing eine Moeglichkeit CPU Cores zu reversieren und anschließend vielleicht von einer Queue mit Daten zu versorgen. ZB. wenn ein Core fertig mit bearbeiten ist und das Ergebnis zurück geliefert hat bekommt es neue Daten. Ich habe bemerkt, dass jedes mal ein neues Thread/Pool zu starten zu viel Zeit Anspruch nehmt wenn man viele Daten hat. Ich habe es wie folgt versucht zu loesen:
Code: Alles auswählen
from multiprocessing import Pool
from heapq import heapreplace
from operator import itemgetter
from pprint import pprint
def test_func(cluster):
ref = dict(cluster)
return ref
get_second = itemgetter(1)
def group_similar_sums(items, group_count): #Loesung von BlackJack
groups = [(0, list()) for _ in xrange(group_count)]
for item in sorted(items, key=get_second, reverse=True):
sum_, group = groups[0]
group.append(item)
heapreplace(groups, (sum_ + item[1], group))
return map(get_second, groups)
if __name__ == '__main__':
info = [('a', 3),('b', 2),('c', 3),('d', 2),('e', 2)]
clusters = group_similar_sums(info, 3)
print clusters # [[('c', 3)], [('a', 3), ('e', 2)], [('b', 2), ('d', 2)]]
pool = Pool(processes=3)
s = dict(pool.imap_unordered(test_func, clusters))
pool.close()
print s
Code: Alles auswählen
python b.py
[[('c', 3)], [('a', 3), ('e', 2)], [('b', 2), ('d', 2)]]
Traceback (most recent call last):
File "b.py", line 29, in <module>
s = dict(pool.imap_unordered(test_func, clusters))
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Vielen Dank im voraus