我编写了一个小Python(2.7.2+)模块(称为TWProcessing
),可以将其描述为一个即兴的批处理管理器。它的工作方式是,我传递给它一个很长的命令列表,然后它将并行运行,但要限制同时处理的总数。这样,如果我有500个命令我想运行,它将循环通过所有这些命令,但一次只运行其中的X个命令,这样就不会压倒机器。在声明此批处理管理器的实例(该类称为TWBatchManager
)时,可以轻松地设置X的值:
batch = TWProcessing.TWBatchManager(MaxJobs=X)
然后,我以非常直接的方式将作业列表添加到此对象:
^{pr2}$其中Queue
是批处理管理器将运行的命令列表。当队列被填满后,我调用Run()
,它循环所有的命令,每次只运行X:
batch.Run()
到目前为止,一切正常。现在我想做的是能够动态地改变X的值(即一次运行的最大进程数),也就是说,当进程仍在运行时。我以前的做法很简单。我有一个名为MAXJOBS的文件,这个类知道要查看它,如果它存在,它会定期检查它,看看所需的值是否发生了变化。现在我想试试更优雅一点的。我希望能够在启动包含批处理管理器的脚本的bashshell中按照export MAXJOBS=newX
的行写一些东西,并让批处理管理器意识到这是它应该使用的X的值。显然os.environ['MAXJOBS']
不是我要找的,因为这是一个在启动时加载的字典。os.getenv('MAXJOBS')
也不能剪切它,因为export
只会影响shell从此产生的子进程。所以我需要的是一种回到启动python脚本的父进程的环境的方法。我知道os.ppid
会给我父pid,但我不知道如何从那里到父环境。如果我不想让孩子在电脑里做任何事情,我都会想办法去做。在
有什么办法吗?当然,我的“从标准文本文件中读取”的想法并不难看,但我是Python新手,因此我试图挑战自己,以优雅和干净的方式做事,尽可能多地学习。提前谢谢你的帮助。在
在我看来,您在请求bash脚本和python程序之间的进程间通信。在
我不完全确定您的所有要求,但它可能是FIFO(命名管道)的候选对象:
1)使fifo:
2)启动python服务器,从fifo读取。(注:以下只是一个极简主义的例子;你必须对事物进行调整:
^{pr2}$3)通过bash脚本,您可以通过
echo
-将字符串“发送”到python服务器:python服务器的输出是:
希望这有帮助。在
相关问题 更多 >
编程相关推荐