python中父进程的重读环境

2024-04-18 23:07:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个小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新手,因此我试图挑战自己,以优雅和干净的方式做事,尽可能多地学习。提前谢谢你的帮助。在


Tags: run命令脚本管理器列表环境进程os
1条回答
网友
1楼 · 发布于 2024-04-18 23:07:30

在我看来,您在请求bash脚本和python程序之间的进程间通信。在

我不完全确定您的所有要求,但它可能是FIFO(命名管道)的候选对象:

1)使fifo:

mkfifo batch_control

2)启动python服务器,从fifo读取。(注:以下只是一个极简主义的例子;你必须对事物进行调整:

^{pr2}$

3)通过bash脚本,您可以通过echo-将字符串“发送”到python服务器:

$ echo "newsize 800" >batch_control
$ echo "newjob /bin/ps" >batch_control

python服务器的输出是:

New command [newsize 800]
New command [newjob /bin/ps]

希望这有帮助。在

相关问题 更多 >