starvedcat
V2EX  ›  编程

请教这个功能的正确实现方式?

  •  
  •   starvedcat · May 26, 2018 · 3350 views
    This topic created in 2950 days ago, the information mentioned may be changed or developed.

    我现在有一个后端服务,该服务会在服务器上运行一个脚本来做一些运算,运算结果保存在文件内,文件名形如 result_12345,并且通过 url/results/12345 在 web 上显示出来

    这个运算可能会耗时很久,所以当运算在进行中时,我设定一个间隔让前端自动刷新

    我希望,只有当运算结束时,url/results/12345 才显示数据,否则,就什么也不显示(而不是在运算进行到一半时,就显示出一部分运算结果)

    我现在能想到的方案:

    1. 修改脚本,将运算结果先保存在一个 temp 文件内,当运行完毕时,再重命名为 result_12345
    2. 修改脚本,将 result_12345 加锁,使得当运算在进行中时,服务器代码无法访问该文件
    3. 修改后端代码,当后端 call 这个脚本时,设定 result[12345]['finished'] = false,并且启动一个子进程去运行脚本;当脚本运行完毕时再设定 result[12345]['finished'] = true

    因为不是严肃用途,所以不需要考虑太多的边缘情况

    有没有比较好的实现方法?谢谢

    6 replies    2018-05-27 02:02:46 +08:00
    starvedcat
        1
    starvedcat  
    OP
       May 26, 2018
    就是说,如何让服务器知道某个脚本运行结束了
    上面的方法 1:“文件不存在->未结束”,“文件存在->已结束”
    上面的方法 2:“文件被加锁->未结束”,“文件可访问->已结束”
    上面的方法 3:“['finished'] == false -> 未结束”,“['finished'] == true -> 已结束”
    kslr
        2
    kslr  
       May 26, 2018 via Android   ❤️ 1
    打开页面建立 websocket 执行完毕获得数据
    你绕的的太远了
    pimin
        3
    pimin  
       May 26, 2018 via iPad   ❤️ 1
    应该说都可以达到目的,选一个方案先实现了,无需纠结。如果是我更喜欢对输出做校验,运算结果开始和结束设置 flag,读取之后第一时间判断 flag。
    fuchaofather
        4
    fuchaofather  
       May 26, 2018 via Android
    @kslr 我觉得这位大佬说的不错
    omph
        5
    omph  
       May 26, 2018   ❤️ 1
    把脚本输出重定向到后端里,运行完毕,由后端生成文件
    chen1164162915
        6
    chen1164162915  
       May 27, 2018
    脚本先把文件占用了,前端请求的时候判断下占用状态
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2611 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 15:51 · PVG 23:51 · LAX 08:51 · JFK 11:51
    ♥ Do have faith in what you're doing.