0

使用这个非常简单的示例,我如何每次将进程限制为 5 个,而不是同时处理所有 90 个?

import multiprocessing

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

if __name__ == '__main__':
    jobs = []
    for i in range(90):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

问候。

4

3 回答 3

3

检查文档:http ://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers

解决方案是创建一个由 5 个工作人员组成的池(在您的情况下),并使用该池来处理您的每个请求。

如果您对 Python 相当陌生并且需要介绍线程和进程,我认为这个演示文稿相当不错: http ://www.slideshare.net/pvergain/multiprocessing-with-python-presentation

通读一遍,你会学到一些东西,最后你会得到一个关于池使用的例子。

于 2013-02-28T11:29:03.280 回答
1

multiprocessing.Pool 是你需要的

于 2013-02-28T11:58:47.980 回答
0

这是您的任务的示例,其中包含线程和 5 个线程长的队列:

#!/usr/bin/env python
import threading, Queue

class ThreadedWorker(threading.Thread):
        jobQueue = Queue.Queue()

        def run( self ):
                while True:
                        num = ThreadedWorker.jobQueue.get()

                        """thread worker function"""
                        print 'Worker:', num

                        ThreadedWorker.jobQueue.task_done()

class MainClass(ThreadedWorker):
        def __init__( self ):
                self.maxThreads = 5
                self.startTest()

        def startTest( self ):
                meine_threads = [ThreadedWorker() for i in range( self.maxThreads )]

                for thread in meine_threads:
                        thread.setDaemon(True)
                        thread.start()

                for i in range(90):
                        ThreadedWorker.jobQueue.put( i )

                ThreadedWorker.jobQueue.join()

mc = MainClass()
于 2013-02-28T12:02:00.240 回答