0

無限ループで多くの urllib リクエストを実行するプログラムがあるため、プログラムが非常に遅くなるため、それらをスレッドとして配置してみました。Urllib はソケット モジュールの奥深くで cpython を使用するため、作成中のスレッドは単純に加算されて何もしません。これは、python の GIL が 2 つの cpython コマンドが異なるスレッドで同時に実行されるのを防ぐためです。Python 2.5 で Windows XP を実行しているため、マルチプロセス モジュールを使用できません。サブプロセス モジュールを調べて、何らかの方法でサブプロセスで Python コードを実行する方法があるかどうかを確認しようとしましたが、何もありませんでした。マルチプロセスのような関数を介してPythonサブプロセスを作成できる方法があれば、それは素晴らしいことです。

また、外部モジュールをダウンロードしたくはありませんが、喜んでダウンロードします。

編集:これは、現在のプログラムのコードのサンプルです。

    url = "http://example.com/upload_image.php?username=Test&password=test"
    url = urllib.urlopen(url, data=urllib.urlencode({"Image": raw_image_data})).read()
    if url.strip().replace("\n", "") != "":
        print url

テストを行ったところ、urllib2 の urlopen は、Request オブジェクトを使用しても使用しなくても、同じか遅いことがわかりました。モジュールのような独自のカスタムtimeitを作成しましたが、上記には約0.5〜2秒かかります。これは、私のプログラムの動作にとって恐ろしいことです。

4

2 に答える 2

0

マルチスレッドが必要な場合は、GIL がないため、Jython がオプションになる可能性があります。

@Jan-Philip と @Piotr に同意します。あなたは何のためにurllibを使用していますか?

于 2012-09-01T22:09:26.857 に答える