限制多进程的进程

时间:2013-02-28 11:25:17

标签: python

使用这个非常简单的例子我如何每次将过程限制为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()

问候。

3 个答案:

答案 0 :(得分: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

通过它,你会学到一些东西,接近结束时你会得到一个关于Pools使用的例子。

答案 1 :(得分:1)

您需要

multiprocessing.Pool

答案 2 :(得分: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()