python 多线程

本文介绍了一个基于Python实现的多线程任务管理器。该管理器通过队列分配任务给多个工作线程,并收集处理结果。每个工作线程从队列中获取任务并执行指定的函数。文中提供了一个示例,演示了如何使用该任务管理器来处理一系列任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#coding:gbk

import Queue

import threading

import sys

 

class WorkerManager:   

   def __init__(self, num_of_workers=10, timeout = 1):   

       self.workQueue = Queue.Queue()   

       self.resultQueue = Queue.Queue()   

       self.threads = []   

       self.timeout = timeout   

       self._recruitThreads(num_of_workers)

       

   def _recruitThreads(self, num_of_workers):   

       for i in range(num_of_workers):   

           thread = Worker(self.workQueue, self.resultQueue, self.timeout)   

           self.threads.append(thread)

           

   def wait_for_complete(self):   

       while len(self.threads):   

           thread = self.threads.pop()   

           thread.join( )   

           if thread.isAlive() and not self.workQueue.empty():   

               self.threads.append(thread)   

       

   def add_job(self, callable, *args, **kwds ):   

       self.workQueue.put((callable, args, kwds))

       

   def get_result(self, *args, **kwds):   

       return self.resultQueue.get(*args, **kwds)

    

class Worker(threading.Thread):

   def __init__( self, workQueue, resultQueue, timeout = 0, **kwds):   

       threading.Thread.__init__( self, **kwds )   

       self.setDaemon(True)   

       self.workQueue = workQueue   

       self.resultQueue = resultQueue   

       self.timeout = timeout   

       self.start()

       

   def run( self ):   

       while True:   

           try:   

               callable, args, kwds = self.workQueue.get(timeout=self.timeout)   

               res = callable(*args, **kwds)   

               self.resultQueue.put(res)   

           except Queue.Empty:   

               break   

           except:

               print 'Worker: %s %s %s' % sys.exc_info()

 

def func(index, fname):

    print index, fname

    

if __name__=='__main__':

    flist = [1,2,3,4,5,6,7,8,9,10]

    worker_num = 2

    wm = WorkerManager(worker_num)

    for i in range(len(flist)):

        fname = flist[i]

        wm.add_job(func, i, fname)

        

    wm.wait_for_complete()

转载于:https://www.cnblogs.com/NancyStartOnce/p/6826215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值