スレッドを使用して5つのWebサイトを同時にクロールする基本クローラを開発中です。 サイトごとに新しいスレッドが作成されます。シェルからプログラムを実行すると、出力ログには5つのスレッドがすべて期待どおりに実行されることが示されます。 しかし、このプログラムをsupervisordプログラムとして実行すると、ログには毎回2つのスレッドしか実行されていないことが表示されます。ログは、5つのスレッドがすべて開始されたが、そのうちの2つだけが実行されており、残りがスタックされていることを示します。 シェルから実行したときとスーパーバイザから実行したときに、この不一致がなぜ起こっているのか理解できません。私が考慮していないものはありますか?スーパーバイザでスレッドが実行されていない
for sid in entries:
url = entries[sid]
threading.Thread(target=self.crawl_loop, \
args=(sid, url)).start()
UPDATES:ここ
がスレッドを作成するコードであるコメントでtdelaneyによって示唆されるように が、私はsupervisord構成で作業ディレクトリを変更し、現在すべてのスレッドが実行されています予想通り。クローラファイルディレクトリに作業ディレクトリを設定すると、問題が修正される理由はまだ分かりませんが、おそらく、監督者がプロセスを管理する方法を知っている人が説明できるでしょうか?
エントリはどこから来たのですか、ログはどこに行きますか? supervisordを使用しているときに、異なるユーザー名と現在の作業ディレクトリがあり、潜在的に考えているファイルとは異なるファイルを使用している可能性があります。 – tdelaney