假设我有一些 future :
f = concurrent.futures.Future()
data = [f]
最终我想将它们转储到 JSON 中,并且我保证届时 futures 已经解决:
f.set_result(42)
json.dumps(data)
我怎么才能把这两个结合起来呢?
最佳答案
覆盖 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()
关于python - json.dump 一个 concurrent.futures.Future()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34879214/