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