2016-07-09 13 views
0

最初に私はある種のメモリリークが問題を引き起こしていると思っていましたが、例外が発生しました。私は完全に理解していませんが、少なくとも今は絞り込んでいます。Python Threading Issue on Windows

スレッドを実行してデータを取得し続けるために、whileループを使用しています。それが問題に陥った場合、それはログに記録され、実行され続けます。最初は少なくとも最初はうまくいくように見えますが、その後は常にスレッディング例外が記録されます。

私は、このセクションにそれを絞り込む:

while True: 
    yada yada yada... 
    #Works fine to this part 
    pool = ThreadPool(processes=1) 
    async_result = pool.apply_async(SpawnPhantomJS, (dcap, service_args)) 
    Driver = async_result.get(10) 
    Driver.set_window_size(1024, 768) # optional 
    Driver.set_page_load_timeout(30) 

私はこれを行うセレンを多く産卵問題が最終的にタイムアウト(例外なく - ただそこにハングアップ)がwebdriversているため、これを使用して、それ与えました例外が10を発生させることができなかった場合、例外をキャッチして再び移動します。大きな修正のようだ。しかし、私はそれがループで問題を引き起こしていると思います。

これはうまく動作しますが、すべてのループで同じ例外がスローされます。

私はスレッドプーリングを十分に理解していないかもしれませんが、私は常にそれを定義してはいけません。起こったことを捕まえるのは難しい例外だから、テストはちょっと苦しいですが、これを修正するかもしれないと思っています。

私にすっきり見えますが、私はそれはそれを修正するだろう確かに言っても十分な問題を理解していない
pool = ThreadPool(processes=1) 
async_result = pool.apply_async(SpawnPhantomJS, (dcap, service_args)) 
while True: 
    Driver = async_result.get(10) 

本当にありがとうございます。

更新:

私はそれの前にbugcounter = 1という名前の変数を入れて、= 2、その後、例外でこれをログに記録コードのこの部分を100%に問題を追跡してきました。

しかし、このコードをループで再現しようとすると、うまく動作し、ウェブドライバが生成され続けます。だから私は分かりません。

さらに更新:

私は時間のためにローカルでこれを実行することができます。場合によっては(Windows)サーバー上で何時間も実行されます。しかし、しばらくすると、ここでどこかで失敗し、私は理由を理解できません。

タイムアウトヒットとブラウザが時間通りに起動しないため、例外がスローされる可能性があります。これはめったに起こりませんが、そのためにループバックします。

ここで私はあまりにも多くのスレッドを作成しており、OSはそれを持っていないと仮定します。私はちょうどそこにスレッドプールのための終わりがあることを発見しました。もしブラウザを起動するためにそれを使用した後にプールを終了すると?

+2

詳細を提供することはできますか?あなたが見ている例外は何ですか?使用しているライブラリの名前は何ですか?マルチプロセッシングまたはスレッドライブラリからThreadPoolを使用していますか? – NirIzr

+0

セクションに絞り込んだ場合は、少なくともあなたのシステムで問題を再現する**最小の動作例**を提供できるはずです – rll

答えて

0

私が最後の答えに来た質問はそれを解決しました。

私はスレッドプールを使用して、ライブラリ内のバグの回避策としてタイムアウトを発生させました。しかし、私はそのスレッドプールを終了していませんでしたので、最終的には、OSが他のプールを作成させないループ量の後になりました。

ブラウザが生成されプールが不要になったときに.terminateを追加すると、問題は解決されました。