改写地一个python利用Queue多线程干活的脚本


python用Queue多线程干活的脚本

#!/usr/bin/env python 
import Queue 
import threading 
import time 
import random   

q=Queue.Queue(0) 
NUM_WORKERS = 3   

class MyThread(threading.Thread): 
    """A worker thread.""" 
    def __init__(self, input, worktype): 
        self._jobq = input 
        self._work_type = worktype 
        threading.Thread.__init__(self) 
    def run(self): 
        """ 
        Get a job and process it. 
        Stop when there's no more jobs 
        """ 
        while True: 
            if self._jobq.qsize()>0: 
                job = self._jobq.get() 
                worktype=self._work_type 
                self._process_job(job,worktype) 
            else: 
                break 
    def _process_job(self, job,worktype): 
        """ 
        Do useful work here. 
        worktype: let this thread do different work 
        1,do list 
        2,do item 
        3,,, 
        """ 
        doJob(job)   

def doJob(job): 
    """ 
    do work function 1 
    """ 
    time.sleep(random.random()*3) 
    print "doing ",job 
if __name__=='__main__':   

    print "begin..." 
    #put some work to q 
    for i in range(NUM_WORKERS*2): 
        q.put(i) 
    #print total job q's size 
    print "job q'size",q.qsize() 
    #start threads to work 
    for x in range(NUM_WORKERS): 
        MyThread(q,x).start() 
    #if q is not empty, wait 
    #while q.qsize()>0: 
    #    time.sleep(0.1)

《 “改写地一个python利用Queue多线程干活的脚本” 》 有 7 条评论

  1. 写得真TMD乱七八糟! 没那本事, 别tmd乱放在博客里误导那些新人.
    self._process_job(job,worktype) worktype, 哪儿来的? 没检查都好意思写博文?

    • 不同的数据类型,可能要看具体应用吧。没有做过测试,queue做集合操作的时候,速度我比较满意。

  2. 谢谢上海探戈的改正,另外,对于多线程有没有比较好的概念介绍?
    只是代码的话看得还是乱七八糟的。

  3. 最近也在学习python 的多线程。百度搜索关键字 “python 多线程“ 找到你。谢谢提供

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据