Perl脚本运行定期(主要)任务并提供REST接口

问题描述 投票:1回答:1

我正在研究一个Perl脚本,该脚本根据文件系统内容进行一些定期处理。整体结构如下:

# ... initialization...

while(1) {
    # ... scan filesystem, perform actions depending on changes detected ...
    sleep 5;
}

我想通过通过HTTP公开接口来增加向此过程中输入一些数据的能力。例如。我想添加一个端点来跳过睡眠,但是我想添加一些方法来输入在下一个迭代中处理的数据。另外,我希望能够通过HTTP查询程序的某些状态(即,简单的fork()在单独的过程中运行Web服务器部分是不够的吗?)

到目前为止,我已经使用过Dancer2框架,但是它具有start;调用,该调用会阻塞,因此不允许运行任何其他任务(例如我的循环)。另外,我当然可以将循环中当前的代码移动到通过Dancer2公开的端点,但是我需要定期调用(尽管是外部程序?),这与仅让网络服务器部分在后台运行。

是否可以毫不客气地(即不阻塞程序)向Perl脚本添加REST服务器功能?如果是:将使用哪个模块?如果不是:我是否应该实施外部流程来定期调用某个端点或完全采用其他解决方案?

(我曾尝试添加dancer2标签,但由于信誉不足而无法添加。请勿误导此点:到目前为止,我仅尝试使用Dancer2而不是Dancer(v.1 ))

rest perl software-design multitasking dancer
1个回答
0
投票

您可以在运行start;之前尝试在后台线程中启动处理循环。

请参见man perlthrtut

您可能希望use threads::shared;声明REST部分和后台线程之间共享的一些变量。或使用专用的队列/事件机制。

© www.soinside.com 2019 - 2024. All rights reserved.