2

機能とパフォーマンスの両方をテストする必要がある Web アプリがあり、使用する予定のテスト スイートの一部は既に Python で記述されています。私が最初にこれを書いたとき、私は Web スクレイピングの手段として mechanize を使用しましたが、私がやろうとしていることには大きすぎるようです (それか、何かが足りないかのどちらかです)。

私がやろうとしていることの基本的なレイアウトは次のとおりです。すべてオブジェクトです。

  • ユーザーには Comm があります (以前は、自分のものと機械化の間のインターフェイスでした)
  • Commにはブラウザがあります(私のCookieJar、urllib2、およびBeautifulSoupオブジェクトを保持し、以前は機械化されていました)
  • ブラウザにはフォームがあります(以前は機械化処理されていました)

さて、スレッドに関する限り、私はそれをダウンしています。GIL を処理することと、Python の別のインスタンスを実行することとの間の調整は、必要に応じて行われますが、提案は行われます。

したがって、私がする必要があるのは、スレッド ユーザーがアプリケーションを実行し、さまざまなこと (ログイン、フォームへの入力、処理のためのフォームの送信など) を実行する一方で、テスト ボックスが大声で叫ばないようにすることです。機械化に関する私の現在の問題はRAMのようです。

RAM の問題の原因の1 つJSESSIONIDは、別のユーザーと何かを行うたびに Cookie を上書きしないようにするために、ユーザーごとに個別のブラウザー インスタンスが必要なことです。

これの多くは些細なことのように思えるかもしれませんが、ここでは何千ものスレッドを実行しようとしているので、少しの調整が大きな意味を持ちます。どんな入力でも大歓迎です。

4

3 に答える 3

1

スレッド化は GIL で問題を引き起こしますが、コアが増えるとさらに問題が発生します。イベントレットでmechanizeを使用して、(複数のプロセスを介して) 同時実行を実現してみてください。 multi-mechanize も確認してください

于 2011-04-03T16:43:44.000 に答える
0

少なくともユーザーとの対話を行うために、非同期ライブラリであるTwistedを検討しましたか?

于 2011-03-08T18:32:08.753 に答える
0

実際には mechanize を使用せずに Threading モジュールを使用しました。これにより、かなり迅速なトランザクションが可能になり、各スレッド内にあまり多くの情報を持たないようにしました。ログイン情報と、スレッド化する前に必要な状態の webapp を取得することで、スレッドをより短く実行できるようになり、したがってより迅速に実行できるようになりました。

于 2011-03-28T17:40:57.010 に答える