0

この非常に単純な例を使用して、90個すべてを同時に処理する代わりに、プロセスを毎回5個に制限するにはどうすればよいですか?

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

スレッド化された Task と 5 スレッド長の Queue の例を次に示します。

#!/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 に答える