我们说我有一些未来:
f = concurrent.futures.Future()
data = [f]
最终我想把它们转储到JSON中,我保证期货在那个时候得到解决:
f.set_result(42)
json.dumps(data)
我怎么能嫁给两个人?
答案 0 :(得分:4)
覆盖JSONEncoder类并在Future实例上调用o.result()
是一种方式。
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)
要使其在没有自定义JSONEncoder的情况下工作,您可以自己遍历数据结构,调用o.result()
:
data = [o.result() if isinstance(o, concurrent.futures.Future) else o for o in data]
或者修改data
:
for i, o in enumerate(data):
if isinstance(o, concurrent.futures.Future):
data[i] = o.result()
答案 1 :(得分:0)
json.dumps([d.result() for d in data])