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而不是list提供results变量。list实现不是线程安全的,所以你可能会遇到很多问题。

  4. 您可以在其他 SO 问题中找到一些示例,即此处

PSThreadPool在 Python 2.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 回答