2011-08-11 13 views
5

urllib2を使用してURLリクエストを実行するPythonスクリプトがあります。非同期に実行され、機能を実行する5つのプロセスのプールがあります。この関数は、URLを呼び出し、データを取得し、必要な形式に解析し、計算を実行し、データを挿入する関数です。データ量は、各URL要求ごとに異なります。スタックされたpythonプロセスを監視する

このスクリプトは、cronジョブを使用して5分ごとに実行します。ときどき私がps -ef | grep pythonをしたとき、私はつぶれたプロセスを見る。プロセスを追跡できるマルチプロセッシングクラス内でプロセスの意味を把握する方法はありますか?その状態の意味は完了していますか?ここでは、コードスニペットです:

これは私が非同期で

pool = Pool(processes=5) 
pool.apply_async(getData,) 

そして、次のurllib2の要求を実行したgetDataの一部であるプロセスを呼び出す方法です:

try: 
    Url = "http://gotodatasite.com" 

    data = urllib2.urlopen(Url).read().split('\n') 
except URLError, e: 
    print "Error:",e.code 
    print e.reason 
    sys.exit(0) 

追跡する方法はありますがスタックされたプロセスを再実行しますか?

+1

"stuck?"これが何を意味するのか説明できますか? –

+0

なぜ 'multiproccesing'でそれらを実行する必要がありますか?複数のcronジョブを使用すると何が問題になりますか? –

+0

@Andrew:つまらないことは、プロセスをハングアップさせることです。 – ash

答えて

1

マルチプロセッシングを使用する傾向がある場合は、pingメカニズムを実装してください。遅いI/Oのためにスタックされたプロセスを探していますか?

は個人的に私は、キュー(必ずしもキューサーバ)となるだろう、例えば~/jobsが最初の仕事を取り、それを実行するプログラムを持って、その後、上で動作するURLのリストであると言います。次に、それはちょうど簿記の問題です - 例えば、プログラムの開始時とそのPIDが何であるかをメモしておきます。低速なジョブを強制終了する必要がある場合は、PIDを強制終了してジョブを失敗としてマークします。

0

Google for urllib2とタイムアウト。タイムアウトに達すると、例外が発生し、プロセスはもはやスタックしません。

関連する問題