如何在不使用默认 RUN 方法时在 python 2.x 中实现信号量



代码流如下所示。

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 表现为队列,并且线程数必须处于有限的大小。有什么更好的方法呢?

  1. 切勿在函数定义中使用可变对象作为默认参数值。在您的情况下:def Discover(myList=[])

  2. 如果需要在线程运行时更新"任务"列表,请使用Queue.Queue而不是list来提供myList。 或者...使用 multiprocessing.pool.ThreadPool 为了限制同时运行的线程数。

  3. 使用 Queue.Queue 而不是 list 来提供results变量。 list实现不是线程安全的,因此您可能会遇到很多问题。

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

附言 Python 2.7+ 中可用的ThreadPool

$ 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'>

最新更新