从主脚本调用python worker脚本作为多个实例

时间:2012-04-10 14:27:56

标签: python worker arcgis-server arcpy

我有一个正在观看Web服务请求工作区的python脚本。每次客户端将作业提交到我的Web服务时,都会在一个众所周知的位置创建一个唯一的作业文件夹。我有一个脚本轮询这个知名的文件夹位置,没有“标志”(一个空白文本文件,带有一个特定的名称,表明此工作的处理已经完成)。

现在我的脚本可以调用一个工作脚本来处理新文件夹的内容,但是必须等到工作脚本完成才能继续处理文件夹。

我的问题是有什么选项让工作脚本的新实例实例化并将控制权返回给经理。是否会创建一个python可执行文件,它接受worker脚本的参数并让管理器脚本通过命令行调用它?或者将工作者脚本创建为可以有多个实例处理工作的类?

完成工作程序脚本后,无需向管理器脚本作业完成消息回复。它将通过将文本文件放入目录来完成此操作。虽然现在我考虑过这个问题,但我必须保留每个工作目录已经发布的地方,因为工作脚本需要1.5分钟来处理。

非常感谢任何建议/链接。

1 个答案:

答案 0 :(得分:0)

首先,我同意您需要在目录中放置一个标志,指示目录正在处理。主脚本应该是唯一设置标志的脚本,否则您将面临竞争条件(两个工作脚本同时占用同一目录)。你可以使用同一个文件;主脚本将其创建为空(表示“正在进行中”),并且工作脚本将1B写入其中(意味着“完成”)。这样,主脚本只需检查标志的存在。

回到你的问题:

  • 你确实可以将你的工作脚本变成一个独立的程序,并通过它来调用它 subprocess模块;

  • 你可以把它变成一个线程(用threading模块[2]), 这更容易编码; 这可能是低效的,因为 GIL, 但是如果你的工作脚本是高度IO限制的,那么它不应该是一个太大的问题;

  • 如果您使用的是Python 3,您可能需要查看 multiprocessing模块[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