0

コードの流れは以下のようなものです。

result = []
def Discover(myList=[]):
    for item in myList: 
        t = threading.Thread(target=myFunc, Args=[item])
        t.start()

def myFunc(item):
    result.append(item+item)

これで複数のスレッドが開始され、現在のシナリオでは、スレッドはメモリを集中的に使用するタスクを実行します。したがって、これにセマフォを含めて、myList がキューとして動作し、スレッドの数が制限されたサイズになるようにしたいと考えています。それを行うより良い方法は何ですか?

4

1 に答える 1

1
  1. 関数定義のデフォルトのパラメータ値として可変オブジェクトを使用しないでください。あなたの場合:def Discover(myList=[])

  2. Queue.Queue代わりにlistを使用myListして、スレッドの実行中に「タスク」のリストを更新する必要があるかどうかを指定します。または...multiprocessing.pool.ThreadPool同時に実行するスレッドの数を制限するために使用します。

  3. 変数を提供するQueue.Queue代わりにを使用します。実装はスレッドセーフではないため、おそらく多くの問題が発生します。listresultslist

  4. 他のSOの質問、つまりここでいくつかの例を見つけることができます。

PSThreadPoolはPython2.7以降で利用可能

$ python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from multiprocessing.pool import ThreadPool
>>> ThreadPool
<class 'multiprocessing.pool.ThreadPool'>
于 2012-12-18T13:05:18.987 に答える