Python 改进现行芹菜加工工艺的实施

Python 改进现行芹菜加工工艺的实施,python,flask,sqlalchemy,celery,flask-sqlalchemy,Python,Flask,Sqlalchemy,Celery,Flask Sqlalchemy,我最近一直在做芹菜。我以前很少使用它,但我想使用它以异步方式处理对数据库的sql查询,以便1个数据点不会阻止网页加载。(这是一个好的用例吗?) 我已经实现了下面这样的东西,但它似乎是多余的,可能有更好的方法。我真的很感激一些批评和建议 示例代码: @cellery.task def_get_player_name(player_标签): player=PlayerStatsCurrent.query.filter\u by(player\u tag=player\u tag).first() 返

我最近一直在做芹菜。我以前很少使用它,但我想使用它以异步方式处理对数据库的sql查询,以便1个数据点不会阻止网页加载。(这是一个好的用例吗?)

我已经实现了下面这样的东西,但它似乎是多余的,可能有更好的方法。我真的很感激一些批评和建议

示例代码:

@cellery.task
def_get_player_name(player_标签):
player=PlayerStatsCurrent.query.filter\u by(player\u tag=player\u tag).first()
返回player.player\u名称
def获取玩家姓名(玩家标签):
result=\u get\u player\u name.delay(player\u标签)
而不是结果。就绪()
睡眠时间(0.5)
player_name=result.get()
返回玩家名称
在上面的示例中,我的网页调用了
get\u player\u name
,以及一些看起来类似但计算成本更高的其他函数


代码是有效的。我得到了预期的输出。我只是想让它更像“pythonic”,因为它现在看起来并不干燥,而且我不擅长芹菜,不知道怎么做。提前感谢您的帮助。

选择何时将任务卸载给后台工作人员是一个有点主观的问题,但在类似于上面示例的情况下,我会让查询与web请求发生在同一进程或线程中

上面显示的内容很可能需要几毫秒。另一方面,如果您有一个需要10秒才能运行的查询,那么可以考虑它是否应该是后台任务,当然也可以考虑它是否需要几分钟

我想说的另一点是,当您作为芹菜任务运行
\u get\u player\u name
时,
get\u player\u name
函数正在阻塞,等待它完成。如果您的web处理程序正在调用后一个函数,则web服务器进程/线程在任务期间仍处于阻塞状态


当我有一个启动后台任务的端点时,我让它创建一个作业记录,并将该记录的ID返回给前端。然后,前端可以使用该作业ID定期轮询,以查看任务是否已完成。在这种情况下,如果您的服务器支持,您也可以使用websockets。

谢谢@zchtodd-我会考虑在何处实施,何时使用芹菜。我现在称之为Plotly Dash,我相信它是建立在React之上的。但我确实需要不断学习芹菜和它的良好实践