博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 3 之多线程研究
阅读量:4044 次
发布时间:2019-05-24

本文共 1728 字,大约阅读时间需要 5 分钟。

今天想写一个工具,通过多线程去一个队列中读取数据,要求如下:

1.多个线程同时读取队列,所以队列要做到线程安全:queue.Queue,这个本身就是线程安生的,所以没有问题

2.主线程要等到所有新开的子线程结束后才能结束,这个用到了Threading中的isAlive()方法,来判断线程是否还存活

3.不能出现开了多个子线程,却被一个抢着CPU执行时间,这个学过操作系统的都知道time.sleep(0.01),线程停止一下,让出CPU下面是代码了

我的博客:

'''Created on 2011-11-10@author: PaulWangDescription:FileName:myThread.py'''import threadingimport timeclass MyThread(threading.Thread):    def __init__(self, threadname,records):        threading.Thread.__init__(self, name=threadname)        self.records = records        self.name = threadname    def run(self):#        time.sleep(0.01)        print("downloadFromQueue start %d" % self.records.qsize())        while(self.records.qsize()):            print( "id:%s get item is %s" % (self.name, self.records.get()) )            time.sleep(0.001)

'''Created on 2011-11-9@author: PaulWangDescription:FileName:test.py'''from queue import Queueimport myMySQLimport threadingimport timefrom myThread import MyThreadtry:    def download(records,threadNum):        tasks = []        for i in range(0,threadNum):            Thread = MyThread(i,records)            Thread.setDaemon( False )#主线程结束后子线程结束整个进程才结束            Thread.start()            tasks.append(Thread)        #如果有线程没有结束,那就不退出,确保主线程不退出        for task in tasks:            if task.isAlive():                tasks.append(task)                continue    db = myMySQL.myMySQL();    db.connect( "localhost","root","","cdcol",True )    db.selectDB("drupal")    rows = db.getrows("select * from test")    print(rows)    myQueue = Queue()    for row in rows:        myQueue.put(row)    download(myQueue,4)       if db.isConnected():        db.close()    print('is over...')except:    if db.isConnected():        db.close()        print("error ")
 
 

转载地址:http://hggdi.baihongyu.com/

你可能感兴趣的文章
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>
React Native(四):布局(使用Flexbox)
查看>>
React Native(七):Android双击Back键退出应用
查看>>
Android自定义apk名称、版本号自增
查看>>
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>