【发布时间】:2020-10-14 17:52:38
【问题描述】:
我有一个从 Rest-API 读取订单字典的要求,如下所示:-
OrderedDict([('_bkt', 'ii~1809~C76785F7-95DF-4D1D-A5E7-A2202947734C'), ('_cd', '1809:718727061')])
OrderedDict([('_bkt', 'ii~1809~C76785F7-95DF-4D1D-A5E7-A2202947735C'), ('_cd', '1809:718727063')])
OrderedDict([('_bkt', 'ii~1809~C76785F7-95DF-4D1D-A5E7-A2202947736C'), ('_cd', '1809:718727065')])
OrderedDict([('_bkt', 'ii~1809~C76785F7-95DF-4D1D-A5E7-A2202947737C'), ('_cd', '1809:718727067')])
我的要求是读取有序字典并将多处理中的 JSON 格式的数据写入 JSON 文件。但是我的代码不能正常工作,它没有将 JSON 格式的数据写入我的目标文件。请提出建议。
代码如下:-
from multiprocessing import Pool
from collections import OrderedDict
import simplejson as json
rr = OrderedDict([('_bkt', 'ii~1809~C76785F7-95DF-4D1D-A5E7-A2202947734C'), ('_cd', '1809:718727061')])
f = open('iitp222.json', "a")
def write_data(args):
f.write(args + '\n')
###Get the results and display them using the ResultsReader.
if __name__ == "__main__":
for result in rr:
print result
p = Pool()
result = p.map(write_data, json.dumps(result))
p.close()
p.join()
f.close()
【问题讨论】:
-
代码没有多大意义,对于字典中的每个项目,您正在创建一个新池并尝试为 single 项目合并多处理。遍历字典也只会产生键,而不是值
-
这段代码只是一个例子。正如我最初所说,我正在从 Rest-API 中提取数据,而我收到的数据是有序字典。我的要求是从 Rest-API 读取并将其写入多处理中的 JSON 文件。由于目前我正在单核上写入数据,因此处理时间相当长。我的要求是缩短完整的阅读和写作部分。
-
听起来您需要使用多线程或异步来一次发出多个请求,因为这是 I/O 绑定代码,然后使用多处理来一次执行多个写入,因为写入磁盘受 CPU 限制。
标签: python json python-3.x multiprocessing pool