rest - 运行定期(主要)任务并提供 REST 接口的 Perl 脚本
问题描述
我正在研究一个 Perl 脚本,它根据文件系统内容进行一些定期处理。整体结构是这样的:
# ... initialization...
while(1) {
# ... scan filesystem, perform actions depending on changes detected ...
sleep 5;
}
我想通过通过 HTTP 公开接口来添加将一些数据输入到这个过程中的能力。例如,我想添加一个端点来跳过睡眠,但也想添加一些方法来输入在下一次迭代中处理的数据。另外,我希望能够通过 HTTP 查询一些程序的状态(即一个简单的fork()
在单独的进程中简单地运行 webserver-part 是不够的?)
到目前为止,我已经使用过Dancer2
一次该框架,但它有一个start;
阻塞的调用,因此不允许任何其他任务(如我的循环)运行。此外,我当然可以将当前在循环内的代码移动到通过暴露的端点,Dancer2
但是我需要定期调用它(虽然是外部程序?)与仅拥有网络服务器相比,这似乎是一个相当模糊的间接方式- 部分在后台运行。
是否可以不显眼地(即不阻塞程序)将 REST 服务器功能添加到 Perl 脚本?如果是:哪些模块将用于此目的?如果不是:我真的应该实现一个外部流程来定期调用某个端点还是完全追求不同的解决方案?
(我尝试添加dancer2
标签,但由于声誉不足而无法添加。不要被此误导:到目前为止我只尝试过Dancer2
没有Dancer
(v.1))
解决方案
您可以尝试在后台线程中启动处理循环,然后再运行start;
.
看man perlthrtut
您可能想要use threads::shared;
声明一些在 REST 部分和后台线程之间共享的变量。或使用专用队列/事件机制。
推荐阅读
- c++ - 允许调用者在我的 Builder 类中使用任何指针类型(包括智能指针)?
- sql - PL/SQL 和 SQL Developer 的结果不同
- swift - PushViewController 显示黑屏
- angular - 如何在 Ionic 5 中获得 canGoBack 功能?
- python - 如何检查 url 是否正常工作(“糟糕,此页面不工作” - 状态码 200)
- docker - 为什么prometheus服务看不到服务但看到自己?
- sql-server - 太多 Group By 会稀释查询结果
- powerbi - PowerBI:工作日或周末
- aws-ebs - EBS 快照完整备份
- ansible - 我试图使用不使用默认 ssh 端口的 ansible ping 主机,但我没有成功