0

我向数据库提出了几个关于最短路径的请求,通常是相同的(76 次迭代,每次迭代有 10'000 到 20'000 个请求;我运行了几次,差异很小,但大多是相同的起点和终点最短路径)。所以我创建了一个缓存。我的缓存是一本字典。

    with open('path_to_OD_dict', 'rb') as file:
        my_unpickler=pickle.Unpickler(file)
        OD_dict = my_unpickler.load()

出发地和目的地用 5 位数字编码。如有必要,我用零填充它们,然后将它们放在一起(我们有 origin_route <destination_route):

    origin_route = str(origin_route).zfill(5)
    destination_route = str(destination_route).zfill(5)
    key = origin_route + destination_route

然后我只是尝试找到我刚刚在我的字典中构建的这个键。如果它存在,我直接拥有我的价值。

    try:
        result = OD_dict[key]

否则,我请求最短路径并将其添加到字典中:

    except:
        result = shortestPathLength(origin_route, destination_route)
        OD_dict[key] = result
        with open('path_to_OD_dict', 'wb') as file:
            my_pickler=pickle.Pickler(file)
            my_pickler.dump(OD_dict)

在线OD_dict[key] = result我有错误TypeError: 'str' object does not support item assignment

我也在用Multiprocessing。我很可能只是试图同时访问OD_dict多个进程。

results = []
po = multiprocessing.Pool()
for item in aSet:
    results.append(po.apply_async(aBiggerFunctionWithShortestPathInIt))                    
po.close()
po.join()
for r in results:
    myResult.add(r.get())

为什么我会收到此特定消息?(类型错误)

另外,我应该如何调整我的代码以能够同时读取OD_dict多个进程(或至少不会产生问题),并在必要时按顺序修改它,而不同时修改转储?

4

0 回答 0