我有一个 python 脚本正在监视 Web 服务请求工作区。每次客户向我的 Web 服务提交作业时,都会在众所周知的位置创建一个唯一的作业文件夹。我有一个脚本在没有“标志”的情况下轮询这个众所周知的文件夹位置(一个具有特定名称的空白文本文件,表示此作业的处理已完成)。
现在我的脚本可以调用工作脚本来处理新文件夹的内容,但必须等到工作脚本完成才能继续分发文件夹。
我的问题是有哪些选项可以使工作脚本的新实例实例化并将控制权返回给管理器。是否会创建一个 python 可执行文件来获取工作脚本的参数并让管理器脚本通过命令行调用它?或者将工作脚本创建到一个可以有多个站点处理工作的类中?
一旦工作脚本完成,它不需要将消息返回给管理器脚本作业完成。它将通过将文本文件放入目录中来完成此操作。虽然现在我想到了,但我必须将每个作业目录保存在某个地方,因为工作脚本需要 1.5 分钟来处理。
任何建议/链接将不胜感激。
请您参考如下方法:
首先,我同意您需要在您的目录中放置一个标志,指示目录正在 处理。主脚本应该是唯一设置标志的脚本,否则您将面临竞争条件的风险(两个工作脚本同时进入同一目录)。您可以使用相同的文件;主脚本将其创建为空(意思是“进行中”),而工作脚本在其中写入 1B(意思是“完成”)。这样,主脚本只需检查标志是否存在。
回到你的问题:
您确实可以将您的工作脚本变成一个独立的程序,并通过
子进程模块;你可以让它成为一个线程(使用
threading模块 [2]), 这更容易编码; 这可能是低效的,因为 GIL , 但是如果你的工作脚本是高度 IO 绑定(bind)的,那应该不是什么大问题;如果您使用的是 Python 3,您可能需要查看
多处理模块 [3]
我从未使用过,但似乎混合了线程的可用性而不容易受到攻击 到 GIL;虽然它似乎不是完全可移植的。
希望对你有帮助
- [1]
http://docs.python.org/library/subprocess.html - [2]
http://docs.python.org/library/threading.html - [3]
http://docs.python.org/dev/library/multiprocessing.html
