【发布时间】:2021-07-12 07:50:10
【问题描述】:
我正在使用一个用户友好的基于 json 的面向文档的数据库,名为 TinyDB。但是我无法将多条数据添加到我的数据库中,因为我正在使用多处理。过了一会儿,我得到了数据库中已经存在 id x 的错误(这是因为 2 个或更多进程正在尝试同时添加数据)。有没有办法解决这个问题?
每次运行我都会插入新的唯一参数。
示例参数:
params = {'id' = 1, 'name': 'poop', 'age': 99}
代码:
resultsDb = TinyDB('db/resultsDb.json')
def run(params):
resultsDb.insert({'id': params['id'], 'name': params['name'], 'age': params['age']})
maxProcesses = 12 # Cores in my pc
for i in range(maxProcesses):
processes.append(Process(target=run, args=(params,)))
for p in processes:
p.start()
for p in processes:
p.join()
【问题讨论】:
-
首先,您在
params['id]中缺少'。其次,您的代码将相同的params值(您没有显示)传递给所有 12 个进程。这真的是您的实际代码吗?如果是这样,即使您没有使用多处理,您当然也会收到重复的 id 错误。或者你有参数列表吗?我可以假设这是 Linux/Unix 吗? -
好的,我已经更新了。不,这不是我的实际代码,使它不那么困难。我添加了一个示例 params dict。是的,我正在使用 Linux。
-
你真的看过Why Not Use TinyDB?
-
查看@HTF 的评论,然后在下面查看我的答案,该答案验证了多处理和多线程与
TinyDB不兼容。我让它工作,但不得不使用Lock序列化插入,这违背了多处理的整个目的。
标签: python python-3.x linux multiprocessing python-multiprocessing