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

标签 python json python-3.x future

假设我有一些 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/

相关文章:

python - 是否有替代 python 函数作为 PHP include() 函数?

javascript - 保护亚马逊存储桶中的 json 数据

java - 解析 JSON 数据时处理空值

java - 使用 Jackson 反序列化树形结构 JSON 中的值

Python3 正则表达式 findall

json - Airflow - 无效的 JSON 配置,必须是字典

python - 映射我的软件在 linux 系统上使用的内容

python - python 中的复合函数 - 对偶组合

python - 为什么我的 send_mail() 命令在 Django 中不起作用?

python - `built-in method numpy.core._multiarray_umath.implement_array_function` 是性能瓶颈吗?