RM服务器Web应用程序-控制进程执行

kershovkershov 成员职位:9贡献我
2019年3月编辑 帮助
想象一下,登录web应用程序的用户运行一些进程。如何了解流程是否仍在运行或已完成?
我的任务是防止其他授权用户在另一个用户运行进程时从web应用程序启动进程。

答案

  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    您可以通过使用一个只有一个作业容器的队列来获得所需的效果。在这种情况下,同一时间只能运行一个进程。

    下面是关于服务器结构的解释:


    问候,
    塞巴斯蒂安。


    kershov
  • kershovkershov 成员职位:9贡献我
    2019年3月编辑
    @SGolbert.谢谢你的建议。

    我有RapidMiner服务器7.2
    我删除了DEFAULT队列,创建了Blocking queue,并将Maximum load参数设置为1。
    但它仍然可能运行许多进程从web应用程序在同一时间从不同的用户(见这在服务器日志)。

    我做的对吗?
    你能描述一下如何根据我的案例一步一步地创建和分配队列给web应用程序吗?
    此外,我正在考虑通知第二个用户的方式,第一个用户的进程仍在运行等。

    先谢谢你
  • SGolbertSGolbert RapidMiner注册分析师、会员职位:344独角兽

    那是旧版本的服务器。问题是web应用程序、web服务和调度进程有不同的执行通道,队列只对调度进程或“在服务器上运行”的进程有效。

    我认为您必须“手工”限制进程,例如使用数据库表来控制进程。您可以在进程启动时设置一个标志,以后的进程将在启动前检查该标志是否关闭。@BalazsBarany也许能进一步帮助你。

    问候,
    塞巴斯蒂安。


  • BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:910独角兽
    你好,

    @SGolbert是的,web应用程序在队列之外工作。

    这里需要的是一种独立于用户和执行上下文的进程锁。例如,您可以使用数据库。
    创建一个名为locks的表(进程varchar,锁定布尔值)。
    在进程名中插入一行,设置locked = false。
    在进程开始时,检查locked = true。如果是,请取消该进程。如果不是,设置locked = true,然后继续。如果您的数据库可以在一个事务中做到这一点,避免读取和更新之间的(非常不可能的)竞争条件,那么它将为您加分。
    在该过程结束时,无论计划内还是计划外(检查此!),再次释放锁。

    这是一种方法。另一种方法(同样依赖于数据库)是为这个进程创建一个表,并以事务方式锁定它。其他进程可能会等待锁定指定的时间(例如1分钟),并在超时后取消。

    问候,

    Balazs
登录注册置评。