python例子-线程和队列

#!/usr/bin/python
#coding:utf-8

import threading
import time
import Queue
import random

#多线程理解
def print_time(threadName,delay,counter):
    while counter:
        time.sleep(delay)
        print "%s:%s\n" %(threadName,time.ctime(time.time()))
        counter -=1

def main():
    print ‘All start at:‘,time.ctime()
    threads = []
    for i in range(5):
        name = ‘Thread-%d‘ % i
        t = threading.Thread(target=print_time,args=(name,1,3))
        threads.append(t)

    for j in threads:
        j.start()

    for k in threads:
        k.join()

    print ‘All Done at: ‘,time.ctime()
# Queue 队列模块理解
queue = Queue.Queue(10)
def main2():
    thread1 = threading.Thread(target=producer)
    thread2 = threading.Thread(target=customer)
    thread1.start()
    thread2.start()
def producer():
    nums = range(100)
    while True:
        num = random.choice(nums)
        if queue.full():
            print ‘库存已满\n‘
        else:
            queue.put(num)
            print "产品 %d\n" % num
        time.sleep(1)
def customer():
    #global queue
    while True:
        if queue.empty():
            print ‘库存已空\n‘
        else:
            num = queue.get()
            print ‘消费:%d\n‘ % num
        time.sleep(1)

# 使用Queue模块控制线程运行数量(并发型)
queue = Queue.Queue()
def que_init():
    lists = range(50)
    for i in lists:
        queue.put(i)
def print_num(num):
    print num
def main3():
    que_init()
    thread_num = 10

    while not queue.empty():
        threads = []
        if queue.qsize() > thread_num:
            threads_number = thread_num
        else:
            threads_number = queue.qsize()
        for i in range(threads_number):
            das = queue.get()
            t = threading.Thread(target=print_num,args=(das,))
            threads.append(t)
        for j in threads:
            j.start()
        for k in threads:
            j.join()
        print ‘\n‘

if __name__ == ‘__main__‘:
    #print_time(‘thread1‘,1,10)
    main3()
时间: 2024-08-27 06:58:11

python例子-线程和队列的相关文章

Python:线程、进程与协程(4)——multiprocessing模块(1)

multiprocessing模块是Python提供的用于多进程开发的包,multiprocessing包提供本地和远程两种并发,通过使用子进程而非线程有效地回避了全局解释器锁. (一)创建进程Process 类 创建进程的类,其源码在multiprocessing包的process.py里,有兴趣的可以对照着源码边理解边学习.它的用法同threading.Thread差不多,从它的类定义上就可以看的出来,如下: class Process(object):     '''     Proces

Python:线程、进程与协程(3)——Queue模块及源码分析

Queue模块是提供队列操作的模块,队列是线程间最常用的交换数据的形式.该模块提供了三种队列: Queue.Queue(maxsize):先进先出,maxsize是队列的大小,其值为非正数时为无线循环队列 Queue.LifoQueue(maxsize):后进先出,相当于栈 Queue.PriorityQueue(maxsize):优先级队列. 其中LifoQueue,PriorityQueue是Queue的子类.三者拥有以下共同的方法: qsize():返回近似的队列大小.为什么要加"近似&q

Python(线程进程2)

二 threading模块 ''' 进程包括多个线程,线程之间切换的开销远小于进程之间切换的开销 线程一定是寄托于进程而存在的 进程:最小的资源管理单元 线程:最小的执行单元 python锁的机制,一个进程一把锁,一个进程一个时间只能取出一个线程,所以无法实现真正的进程中的线程并行 I/O密集型任务 计算密集型任务 ''' 2.1 线程对象的创建 2.1.1 Thread类直接创建 import threading import time def countNum(n): # 定义某个线程要运行

Python:线程、进程与协程(7)——线程池

前面转载了一篇分析进程池源码的博文,是一篇分析进程池很全面的文章,点击此处可以阅读.在Python中还有一个线程池的概念,它也有并发处理能力,在一定程度上能提高系统运行效率:不正之处欢迎批评指正. 线程的生命周期可以分为5个状态:创建.就绪.运行.阻塞和终止.自线程创建到终止,线程便不断在运行.创建和销毁这3个状态.一个线程的运行时间可由此可以分为3部分:线程的启动时间.线程体的运行时间和线程的销毁时间.在多线程处理的情景中,如果线程不能被重用,就意味着每次创建都需要经过启动.销毁和运行3个过程

python之线程、进程和协程

引言 解释器环境:python3.5.1我们都知道python网络编程的两大必学模块socket和socketserver,其中的socketserver是一个支持IO多路复用和多线程.多进程的模块.一般我们在socketserver服务端代码中都会写这么一句:server = socketserver.ThreadingTCPServer(settings.IP_PORT, MyServer)ThreadingTCPServer这个类是一个支持多线程和TCP协议的socketserver,它的

python 进场线程

threading.Event 类 event.isSet():返回event的状态值: event.wait():如果 event.isSet()==False将阻塞线程: event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度: event.clear():恢复event的状态值为False. 线程的一个关键特性是每个线程都是独立运行且状态不可预测.如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问

利用JAVA线程安全队列简单实现读者写者问题。

常见的操作系统教科书中,会使用互斥锁来实现读者线程和写者线程的同步问题,但是在JDK5推出线程安全队列之后,将该问题变得异常简单. java.util.concurrent.ConcurrentLinkedQueue 是线程安全的非阻塞队列,其实很容易想到,非阻塞队列当线程需要等待的时候,则不会阻塞等待,而是直接根据情况返回. java.util.concurrent.LinkedBlockingQueue 是线程安全的阻塞队列,该队列能够在很多情况下对线程进行阻塞,比如队列为空时调用take(

聊一下Python的线程 & GIL

再来聊一下Python的线程 参考这篇文章 https://www.zhihu.com/question/23474039/answer/24695447 简单地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾,PHP没有多线程),Python的多线程是有compromise的,在任意时间只有一个Python解释器在解释Python bytecode.Ruby也是有thread支持的,而且至少Ruby MRI是有GIL的. 首先要了解 GIL,全称 Global Interp

Python:线程、进程与协程(2)——threading模块(1)

上一篇博文介绍了Python中线程.进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块.首先来看看threading模块有哪些方法和类吧. 主要有: Thread :线程类,这是用的最多的一个类,可以指定线程函数执行或者继承自它都可以实现子线程功能. Timer:与Thread类似,但要等待一段时间后才开始运行,是Thread的子类. Lock :原锁,是一个同步原语,当它锁住时不归某个特定的线程所有,这个可以对全局变量互斥时使用. RLock :可重入锁