8

サブプロセスを介してcurlコマンドを実行しています。このcurlコマンドは、別のサーバーでビデオ処理を開始し、応答を待ちます。プロセスが完了すると、リモートサーバーはjsonオブジェクトを返します。poll()値を使用してサブプロセスのステータスをチェックしています。これは、None-プロセスが完了していません。0-プロセスが正常に完了しました。1-エラーがあります。

リモートサーバーで処理に約30分以下かかる場合は正しい応答が得られますが、処理にさらに時間がかかる場合は、リモートサーバーが処理を完了し、すでにjsonオブジェクトを返しました。

誰かが教えてもらえますか、poll()が特定の時間の後にNoneのみを返す理由として考えられるものは何でしょうか。前もって感謝します。

私のPopenオブジェクトは:

object = subprocess.Popen(str(curlCmd), shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)

2秒ごとに電話をかけobject.poll()て、プロセスが正常に完了したかどうかを確認しています。

4

4 に答える 4

1

Python 2.7 およびおそらく 3.x では、以下を使用できます。

object._internal_poll(_deadstate=127)

回避策として通常の代わりにPopen.poll()。プロセスが終了した場合、これは None ではなく 127 を返します。

もちろん、これは内部モジュールのメソッドであり、Python のライブラリの更新後に動作するという保証はありません。

于 2012-10-25T07:17:11.610 に答える
0

最後に、サブプロセスを作成してcurlコマンドを呼び出す代わりに、PyCurlを使用することになりました。.poll メソッドが特定の時間後に何も返さない、理由はまだ不明です。subprocess-poll メソッド (wait/communication なし) を使用している方は、長いプロセスを実行している場合は注意してください。JF Sebastian と Pranav に道順を教えていただきありがとうございます。

于 2012-08-17T18:00:34.393 に答える