# -*- coding:utf-8 -*-
import threading
import Queue
import time
import random
from faker import Faker
class MyThread(threading.Thread):
'''
线程模型
'''
def __init__(self,queue):
threading.Thread.__init__(self)
self.queue = queue
self.start() # 因为作为一个工具,线程必须永远“在线”,所以不如让它在创建完成后直接运行,省得我们手动再去start它
def run(self):
while True: # 除非确认队列中已经无任务,否则时刻保持线程在运行
try:
task = self.queue.get(block=False) # 如果队列空了,直接结束线程。根据具体场景不同可能不合理,可以修改
time.sleep(random.random()) # 假设处理了一段时间
print 'Task %s Done' % task # 提示信息而已
self.queue.task_done()
except Exception,e:
break
class MyThreadPool():
def __init__(self,queue,size):
self.queue = queue
self.pool = []
for i in range(size):
self.pool.append(MyThread(queue))
def joinAll(self):
for thd in self.pool:
if thd.isAlive(): thd.join()
if __name__ == '__main__':
q = Queue.Queue(10)
fake = Faker()
for i in range(5):
q.put(fake.word())
pool = MyThreadPool(queue=q,size=2)
pool.joinAll()
多线程例子
最新推荐文章于 2025-04-17 00:28:16 发布