json.dump一个concurrent.futures.Future()?

时间:2016-01-19 14:21:13

标签: python json python-3.x future

我们说我有一些未来:

f = concurrent.futures.Future()
data = [f]

最终我想把它们转储到JSON中,我保证期货在那个时候得到解决:

f.set_result(42)
json.dumps(data)

我怎么能嫁给两个人?

2 个答案:

答案 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])