小编kon*_*tin的帖子

在Gson双序列化中关闭科学记数法

当我使用Gson序列化包含接近零的double值的Object时,它正在使用科学的电子符号:

{"doublevaule":5.6E-4}
Run Code Online (Sandbox Code Playgroud)

我如何告诉Gson生成

{"doublevaule":0.00056}
Run Code Online (Sandbox Code Playgroud)

代替?我可以实现自定义JsonSerializer,但它返回一个JsonElement.我将不得不返回一个包含double的JsonPrimitive,它无法控制序列化的方式.

谢谢!

java format double json gson

17
推荐指数
3
解决办法
9456
查看次数

python池apply_async和map_async不会阻塞完整队列

我对python很新.我正在使用多处理模块读取stdin上的文本行,以某种方式转换它们并将它们写入数据库.这是我的代码片段:

batch = []
pool = multiprocessing.Pool(20)
i = 0
for i, content in enumerate(sys.stdin):
    batch.append(content)
    if len(batch) >= 10000:
        pool.apply_async(insert, args=(batch,i+1))
        batch = []
pool.apply_async(insert, args=(batch,i))
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)

现在一切正常,直到我处理我输入我的python程序的巨大输入文件(数亿行).在某些时候,当我的数据库变慢时,我看到内存已满.

经过一番播放后,事实证明pool.apply_async以及pool.map_async永远不会阻塞,因此要处理的调用队列越来越大.

我的问题的正确方法是什么?我希望我能设置一个参数,一旦达到某个队列长度,就会阻塞pool.apply_async调用.Java中的AFAIR可以为ThreadPoolExecutor提供一个具有固定长度的BlockingQueue用于此目的.

谢谢!

python queue design-patterns multiprocessing python-multiprocessing

10
推荐指数
3
解决办法
1万
查看次数