zoukankan      html  css  js  c++  java
  • Python之多线程:Threading模块

    1、Threading模块提供的类
    Thread,Lock,Rlock,Condition,Semaphore,Event,Timer,local
    2、threading模块提供的常用的方法
    (1)threading.currentThread(): 返回当前的线程变量。
    (2)threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
    (3)threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果
     
    一、Thread 线程类
    1、t1=threading.Thread(target=,name=,args=,kwargs=)
    参数说明:
    •group:线程组,目前还没有实现,库引用中提示必须是None;
    •target:要执行的方法;
    •name:线程名;
    •args/kwargs:要传入方法的参数。
     
    import threading
    import time
    def func1(a=None,b=None):
    print a,b
    time.sleep(1)
     
    t1=threading.Thread(target=func1,args=('hello','world')) //这句话只是创建了一个线程,并未执行这个线程,此时线程处于新建状态。
    t1.isAlive() 线程是否在运行
    t1.getName 取线程名
    t1.setName('test1') 设置线程名
    t1.start() 启动线程,此时线程仍未处于运行状态,只是处于准备状态。
    t1.join() 等待线程执行完
     
    进程所在的线程是主线程
    2、守护线程
    t1.setDaemon(True)
    主进程执行结束时,如果是守护线程,且守护线程没有执行结束,也一并随着主线程退出
    # encoding=utf-8
    import threading
    import time
     
    def func1(a=None, b=None):
    print a,b
    print 'enter func1'
    time.sleep(5)
    print 'exit func1'
     
    t1 = threading.Thread(target=func1, args=('Hello ','World!'))
    print t1.isAlive()
    print t1.getName()
    t1.setDaemon(True)
    print 'daemon:',t1.isDaemon()
    t1.setName('test1')
    print t1.getName()
    t1.start()
    time.sleep(1.1)
    print t1.isAlive()
    print 'main thread end'
     
    3、threading.currentThread() 主线程MainThread
    二、多线程编程的方式
    1、创建线程的两种方式
    方式一:Thread的方式,新建一个线程实例,通过target传入执行流。通过args传入参数
    方式二:Thread类通过重写的方式,t1.start()(内部调用了run())。所以可以重写run()方法,达到我们想要的效果
     
    2、方式二:重写Thread类
    import threading
    class Mythread(threading.Thread):
    def __init__(self,a):
    threading.Thread.__init__(self):
    self.a=a
    def run(self):
    print 'now sleep',self.a,'seconds'
    time.sleep(a)
    print 'sleep end'
     
    t1=MyThread(3)
    t2=MyThread(2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()
     
    #隐含问题:对于线程的执行结果,主线程如何获取?
    (1)通过队列的方式
    (2)通过全局变量的方式
     
    3、并发与并行
    并发是指一个时间段内同时运行,表示的是一个区间
    而并行是指在同一个时间点上都在运行,是一个点,并且并发在同一时间点上只能有一个程序在运行
    并发线程的两种关系:同步与互斥。
     
    三、线程池
    from multiprocessing.dummy import Pool
    def func(a):
    time.sleep(1)
    print a
    if __name__=='__main__':
    lista=[1,2,'a','b','5']
    pool=Pool(5)
    pool.map(func,lista)
    pool.close() #线程池不接受新线程的请求
    pool.join() #等待线程全部执行完
     
  • 相关阅读:
    VMware 8安装Mac OS X 10.7 Lion正式版
    linq to sql sum
    拍照,去相册剪切图片
    Binding for WPF Styles
    JDK1.8简单配置环境变量两步曲
    hibernate系列之四
    idea中使用逆向工程三部曲
    hibernate系列之一
    hibernate系列之二
    《JSON笔记之二》封装JSONUtil
  • 原文地址:https://www.cnblogs.com/emily-qin/p/7210910.html
Copyright © 2011-2022 走看看