Das Überschreiben der JSONEncoder-Klasse und das Aufrufen von o.result()
auf Future-Instanzen ist ein Weg.
class CustomJSONEncoder(json.JSONEncoder):
def default(self, o, *args, **kwargs):
if isinstance(o, concurrent.futures.Future):
return o.result()
return super(CustomJSONEncoder, self).default(o, *args, **kwargs)
json.dumps(data, cls=CustomJSONEncoder)
Um es ohne eine kundenspezifische JSONEncoder funktioniert, Sie durch die Datenstruktur selbst, ruft o.result()
iterieren könnte:
data = [o.result() if isinstance(o, concurrent.futures.Future) else o for o in data]
Oder data
anstelle ändern:
for i, o in enumerate(data):
if isinstance(o, concurrent.futures.Future):
data[i] = o.result()
Ich habe einen Hack, der die 'jsonEncoder' Klasse außer Kraft setzt, aber gibt es vielleicht eine bessere Lösung? –