ループ内で外部プロセスを複数回呼び出しています。擬似コードを提供するには:
for i in xrange(1, 100):
call external proc which inserts a row into a table
ここでの問題は、外部プロセスが呼び出されるたびに別のスレッドで実行されるため、実行に時間がかかることです。そのため、python は実行を続行していたでしょう。これにより、挿入が行ロックに入り、挿入が妨げられます。
次の制約の下で、プロセスが完了するのを待つ理想的な方法は何ですか:
- 外部プロセスの動作方法を変更できません。
- できることはわかっていますが、thread.sleep のようなハックは使いたくありません。
- DB 設定を変更できません。
外部プロシージャを呼び出すコードは次のとおりです。
def run_query(query, username, password):
try:
process = subprocess.Popen( "<path to exe> -u " + username + " -p "+ password +" " + query,
shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE )
result, error = process.communicate()
if error != '':
_pretty_error('stderr', error)
except OSError, error:
_pretty_error('OSError', str(error))
return result