gpt4 book ai didi

perl - 限制在 Perl 脚本中执行的程序的同时实例数(>1)

转载 作者:行者123 更新时间:2023-12-01 05:07:48 27 4
gpt4 key购买 nike

我在 Perl 脚本中使用资源密集型程序 [特别是 rclone将文件传输到 Google 云端硬盘]。

我还没有想好如何调用 rclone ,因为我需要限制 rclone 的实例数量基于某些条件(与防止服务器过载、卡住、崩溃等相关的任何)。我希望脚本在执行之前等待 apt 系统“条件”(这可能会持续很长时间或不确定的时间)rclone .

一些细节:

  • 脚本本身实质上是由另一个程序(这个程序是用 Python 编写的——称这个程序为 <A> 以供引用)包含(可能有很多)文件的文件或目录路径。
  • <A>只返回一个值给脚本,因此对脚本或rclone一无所知,除此之外,它还接受输入。
  • <A>无法更改(即更改 <A> 超出了我的知识范围)
  • <A>以不同的时间间隔开火[即有时它会连续快速多次执行脚本(创建多个实例),有时它可能每隔几小时、几分钟等只触发一次。]
  • 假设rclone也不能直接更改(即再次超出我的知识范围)。
  • 如果绝对必要,可以限制脚本实例的数量而不是 rclone (虽然我更喜欢它只是 rclone ,因为脚本完成的处理相当轻,不需要限制)。
  • 模块很好用。
  • 我想避免使用类似 Unix 的操作系统命令,例如 pgrepps (除非绝对必要)。

目前,我正在使用编写得相当糟糕的 bash 脚本来代替 Perl 脚本。 bash 脚本使用 pgrep -wc 实现了一个基本的(设计不佳的)“检查/ sleep 循环” , sleep , while循环和 if声明。 (老实说,我什至不认为 bash 脚本真的有用/对 atm 有帮助。)

最佳答案

我暂时假设您的脚本是唯一运行 rclone 的东西。如果您只想运行 1 个副本,you would just use a lockfile .

对于 N 个实例(对于小 N),我只需要 N 个锁文件——让程序在一个循环中依次尝试每个锁;如果所有锁都已被持有,则暂停并在循环中重试 1 秒后。锁定后,运行 rclone,然后在完成后释放锁定。


一个更合理的方法是使用 SysV 信号量,但除非您想要一个大的 N、真正关心响应时间或担心调用者之间的公平性,否则不太值得花时间学习它们。


如果您的脚本不是唯一调用 rclone 的程序,则需要拦截所有调用 - 可以将 rclone 替换为包装器,而不是将此代码放入您的程序中实现上面的并行约束,然后调用真正的程序。

关于perl - 限制在 Perl 脚本中执行的程序的同时实例数(>1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com