私は非常に奇妙なエラーがあります。 psqlを使用して大量のデータをPGデータベースにロードします。私のコードの1つの関数は、すべての負荷を行います。私のコードベースの1つの部分がload関数を呼び出し、それはうまく動作します。別の部分は異なるデータで同じ関数を呼び出します)、psqlのサブプロセス呼び出しがハングします(タイムアウトはそれを終了させる必要があります)。コマンドラインから同じコマンドを実行すると、うまく動作します:ここでPythonサブプロセスを使ったタイムアウト
は私のコードです:
myEnv = os.environ.copy()
myEnv["PGPASSWORD"] = <<db password>>
output = None
output = subprocess.check_output(popenArgs, stderr=subprocess.STDOUT, timeout=120, env=myEnv)
タイムアウトエラーがある:
Traceback (most recent call last):
File "C:\Data\Dropbox\Engagements\<Client>\Src\prod_db.py", line 102, in _copyFrom
output = subprocess.check_output(popenArgs, stderr=subprocess.STDOUT, timeout=120, env=myEnv)
File "C:\Tools\WinPython-64bit-3.5.1.3\python-3.5.1.amd64\lib\subprocess.py", line 629, in check_output
**kwargs).stdout
File "C:\Tools\WinPython-64bit-3.5.1.3\python-3.5.1.amd64\lib\subprocess.py", line 703, in run
stderr=stderr)
subprocess.TimeoutExpired: Command '"C:/Program Files/PostgreSQL/9.4/bin/psql.exe" -h <<DB LOCATION>> -p 5432 -d forecast_dev -U forecast -v ON_ERROR_STOP=1 -AtXwa -c "\copy di_entities_load from C:\Users\Marc\AppData\Local\Temp\copytempdi_entities_load7.csv with csv"' timed out after 120 seconds
私はコマンドで手動PGPASSWORD変数を設定した場合エラーのコマンドをコピーしてコマンドラインに貼り付けると、正常に実行され、すばやく実行され、完了して終了して戻ります。
私が言ったように、このコードは、アプリケーションの別の部分から別のテーブルに、別のデータで呼び出されたときに機能します。
pythonから呼び出されたときにこれが失敗する原因は何でしょうか?それでもコマンドラインでは動作しますか?
Windows 10 Pro、Py3.5、PG 9.4、pg8000 dbモジュール。