TWProcessing
即興のバッチ マネージャーとして説明できる小さな Python (2.7.2+) モジュール ( と呼ばれる) を作成しました。それが機能する方法は、並行して実行されるコマンドの長いリストを渡すことですが、同時プロセスの総数を制限します。そうすれば、実行したいコマンドが 500 個ある場合、それらすべてをループしますが、マシンを圧倒しないように一度に X 個しか実行しません。X の値は、このバッチ マネージャーのインスタンスを宣言するときに簡単に設定できます (クラスが呼び出されTWBatchManager
ます)。
batch = TWProcessing.TWBatchManager(MaxJobs=X)
次に、ジョブのリストをこのオブジェクトに非常に簡単な方法で追加します。
batch.Queue.append(/CMD goes here/)
Queue
バッチ マネージャが実行するコマンドのリストはどこにありますか。キューがいっぱいになると、一度にRun()
X のみを実行して、すべてのコマンドをループする which を呼び出します。
batch.Run()
これまでのところ、すべて正常に動作しています。今私がやりたいことは、X の値 (つまり、一度に実行されるプロセスの最大数) を動的に、つまりプロセスがまだ実行されている間に変更できるようにすることです。これを行う私の古い方法はかなり簡単でした。クラスが参照することを認識している MAXJOBS というファイルがあり、存在する場合は定期的にチェックして、目的の値が変更されたかどうかを確認します。今度は、もう少しエレガントなものを試してみたいと思います。バッチ マネージャーを含むスクリプトを起動した bash シェルの行に沿って何かを記述しexport MAXJOBS=newX
、バッチ マネージャーに、これが使用すべき X の値であることを認識させたいと考えています。これは起動時に読み込まれる辞書であるため、明らかos.environ['MAXJOBS']
に私が探しているものではありません。os.getenv('MAXJOBS')
export
シェルがそれ以降に生成する子プロセスにのみ影響するため、それもカットしません。したがって、Python スクリプトを起動した親プロセスの環境に戻る方法が必要です。親 pid が表示されることはわかっos.ppid
ていますが、そこから親環境に移動する方法がわかりません。親シェルが子プロセス環境を変更できる方法があるかどうかを確認するために、interwebz を調べてみましたが、そのようなことをしようとしないでくださいと主張する傾向があることがわかりました。コンピューターでできる最も醜いこと。
これをやってのける方法についてのアイデアはありますか?「標準のテキスト ファイルから読み取る」という私の考えはそれほど醜いものではありませんが、私は Python を初めて使用するので、できるだけ多くのことを学ぶためにエレガントでクリーンな方法で物事を行うように自分自身に挑戦しようとしています。よろしくお願いします。