1

プログラム全体ではなく、1 行でマルチスレッドを使用できる方法があるかどうかを知る必要があります。

つまり、プログラムをシングル スレッドとして実行したいのですが、途中で特定の 1 行をマルチスレッド化したいと考えています。私はこのようなものをマルチスレッドにしたい:

br.open("http://www.google.com.pk/search?q="+str(m))

したがって、基本的にはすべてのリンクを開きたい ( m50 個の個別の値を想定できる) ので、それらを次々に開きたくありません。一気に50個開けたい!それらを1つずつ開くと、プロセスが遅くなるため、それを避けたい.

4

3 に答える 3

3

threading.Threadクラスを見たいと思います。

import threading

def worker():
    """thread worker function"""
    print 'Worker'
    return

threads = []
for i in range(5):
    t = threading.Thread(target=worker)
    threads.append(t)
    t.start()

複数の HTTP リクエストを実行している場合は、queue.Queueも参照してください。複数の HTTP リクエストをキューに入れます。これが実際の良い例です。

于 2012-06-19T07:50:30.383 に答える
1

あなたは非同期通信の後です。私は自分で試したことはありませんが、grequestsを見てください。以前は requests ライブラリの一部でしたが、除外されました。使用法 (github ページから) は非常に簡単に思えます:

import grequests

urls = [
    'http://www.heroku.com',
    'http://tablib.org',
    'http://httpbin.org',
    'http://python-requests.org',
    'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
grequests.map(rs)

Python 標準ライブラリ内に保持したい場合は、asyncoreモジュールを参照してください。

また、別の代替手段はTwistedです。要件に対してやり過ぎかもしれませんし、学習曲線が急勾配であることはよく知られています。

于 2012-06-19T07:50:31.800 に答える
0

ここでは、OP からの元の質問に実際に答えようとしています。明らかな読みやすさの問題があるため、このコードはお勧めしませんが、Java と同じように、Python で 1 行から実際にスレッドを実行できます。

Python のスレッド クラスを使用します。

from threading import Thread

呼び出す関数を定義します。

def func1():
   print("Hello World")

1 行からスレッドを開始する

Thread(target=func1).start()

これが、Python で 1 つのライナー スレッドを開始する方法です。ターゲット関数に引数を渡す方法については

于 2018-02-17T04:22:27.870 に答える