Flask API在长密码查询时中断

2024-09-28 19:09:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Flask中构建一个API,它与neo4jdb通信。一个特别大的查询(15分钟以上)会破坏API。中断意味着它运行的Docker容器在没有记录请求的情况下停止。问题是,当我在本地运行API时,无法再现错误。你知道吗

我想我需要的是一种使用py2neo运行查询的方法,然后返回任意响应,而不必等待查询完成。你知道吗

def post(self):
    g.cypher.run("MATCH a-[r]-b SET r.cost = "
    "CASE WHEN r.cost <1 THEN 0.01*exp(4.60517*(r.costx+0.01)) ELSE r.cost END " 
    "SET r.costx = "
    "CASE WHEN r.costx < 1 THEN r.costx + 0.01 ELSE r.costx END "
    "RETURN r")
    return make_response(jsonify({'success': 'all relationship costs increased'}), 200)

我真的不是一个行动的家伙,所以任何更广泛的见解,这个难题是最受欢迎的。你知道吗


Tags: dockerapiflask记录情况else容器end
1条回答
网友
1楼 · 发布于 2024-09-28 19:09:10

数据库里有多少数据?你最好运行start r=rel(*)。。。你知道吗

你为什么一开始就返回r?你知道吗

我将批量处理您的查询并添加以下条件:

START r=rel(*)
WITH r
WHERE r.cost < 1 OR r.costx < 1
WITH r
SKIP {batchSize} LIMIT 100000
SET r.cost = CASE WHEN r.cost < 1 THEN 0.01*exp(4.60517*(r.costx+0.01)) ELSE r.cost END 
WITH r WHERE r.costx < 1
SET r.costx = r.costx + 0.01

或者最好分两次进行:

START r=rel(*)
WITH r
WHERE r.cost < 1
WITH r
SKIP {batchSize} LIMIT 100000
SET r.cost = 0.01*exp(4.60517*(r.costx+0.01)) 

成本也一样

相关问题 更多 >