1

Pythonから私はJava関数を呼び出しています:

os.system("java -jar example.jar run myFunction 'inFile.txt' 'outFile.txt' " ) 

この関数はファイルを処理しており、出力は「outFile.txt」に書き込まれます。出力は、「inFile.txt」の情報に依存します。入力ファイルの処理と出力ファイルへの書き込み中に、「outFile.txt」が大きくなりすぎる(数十GB)場合があります。その場合、現在の処理を終了して、別のinFile.txtの処理に進みます。

書き込まれている私のoutFile.txtが10GB以上に成長したことを知る方法はありますか?

編集:Maksymによって提案されたように、私は次のコードを使用しており、機能しているようです。ありがとう

import subprocess
from time import sleep
p = subprocess.Popen(["java", "-jar", "example.jar", "run", "myFunction", "'inFile.txt'", "'outFile.txt'")
rc = p.poll()  #returncode
while (rc == None):
    sleep(1)
    if(os.path.getsize(outFileName) < 1000000000):
        rc = p.poll()
        continue
     else:
        p.kill()
        break
4

3 に答える 3

2

サブプロセスモジュールを見てください。Popenを使用すると、プロセスをフォークして、必要なときに強制終了できます。

import subprocess
from time import sleep
p = subprocess.Popen(["java", "-jar", "example.jar", "run", "myFunction", "'inFile.txt'", "'outFile.txt'")
while not check_my_conditions():
    sleep(my_timeout)
p.kill()

次に、ファイルをローテーションしてプロセスを再開できます。

于 2013-03-04T19:50:04.247 に答える
1

を直接呼び出すのではなく、 multiprocessing.Process組み込みクラスのos.system使用を強く検討する必要があります。生成されたプロセスをより適切に処理します。

os.statファイルサイズを確認するなどして、出力ファイルを定期的に監視する必要があります。その後、しきい値を超えたときに、元のプロセス(または実行したいこと)を強制終了できます。

于 2013-03-04T19:36:08.483 に答える
0

Javaアプリケーションは、実行中にstdoutまたはstderrに出力(たとえば、処理されたレコードの数)を提供しますか?もしそうなら、PythonのPopenクラス(サブプロセスモジュール内)を使用してそれを呼び出し、「多すぎる」処理がいつ行われたかを見積もることができます。

于 2013-03-04T19:35:49.990 に答える