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() #等待线程全部执行完
 

Python之多线程:Threading模块的更多相关文章

  1. Python:多线程threading模块

    目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...

  2. Python:使用threading模块实现多线程编程

    转:http://blog.csdn.net/bravezhe/article/details/8585437 Python:使用threading模块实现多线程编程一[综述] Python这门解释性 ...

  3. 再看python多线程------threading模块

    现在把关于多线程的能想到的需要注意的点记录一下: 关于threading模块: 1.关于 传参问题 如果调用的子线程函数需要传参,要在参数后面加一个“,”否则会抛参数异常的错误. 如下: for i ...

  4. python编程中的并发------多线程threading模块

    任务例子:喝水.吃饭动作需要耗时1S 单任务:(耗时20s) for i in range(10): print('a正在喝水') time.sleep(1) print('a正在吃饭') time. ...

  5. Python初学——多线程Threading

    接着上篇继续跟着沫凡小哥学Python啦 1.1 什么是多线程 Threading 多线程可简单理解为同时执行多个任务. 多进程和多线程都可以执行多个任务,线程是进程的一部分.线程的特点是线程之间可以 ...

  6. Python开发——14.threading模块和multiprocess模块

    一.threading模块 1.threading类的两种创建方法 (1)直接创建 import time import threading def Hi(num): print("hell ...

  7. 多线程threading模块

    python的多线程编程 简介 多线程编程技术可以实现代码并行性,优化处理能力,同时功能的更小划分可以使代码的可重用性更好.Python中threading和Queue模块可以用来实现多线程编程. 详 ...

  8. python中的threading模块使用说明

    这段时间使用python做串口的底层库,用到了多线程,对这部分做一下总结.实际用完了后再回过头去看python的官方帮助文档,感觉受益匪浅,把里面的自己觉得有用的一些关键点翻译出来,留待后续查验.th ...

  9. Python学习【第26篇】:Python系列- 多线程(threading)

    线程的调用方式:threanding模块 import threading import time def sayhi(num): #定义每个线程要运行的函数 print("running ...

  10. python的多线程threading

    多线程threading 1.Thread创建线程: 上代码: #!/usr/bin/env python3 import threading import time def A(): t_name ...

随机推荐

  1. 【CodeBase】PHP将数组键名转成变量名

    <?php /** * php 把数组中的键名所为变量名键值作为变量名 */ $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>5,'e'=> ...

  2. JDK学习---深入理解Comparator、TreeSet、TreeMap为什么可以排序

    我本来打算仔细的去分析分析TreeSet和TreeMap排序规则,并且从底层实现和数据结构入手.当我去读完底层源码以后,我感觉我就的目标定的太大了,单单就是数据结构就够我自己写很久了,因此我决定先易后 ...

  3. 学习Pytbon第九天,函数1 过程和参数

    函数def func1():定义函数 '''testing1'''#函数的说明 print("in the func1")#定义过程 return 0 #得到函数的执行结果.还是程 ...

  4. 裸机——wdt

    1. 首先晓得看门狗的基本知识 看门狗是带复位功能的定时器,用于在系统跑飞时复位系统. 接下来按照上次的知识对看门狗进行推导 看门狗的关键词是 定时器 复位 定时器 关键是 时间段 中断 时间段 关键 ...

  5. SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared。

    可以查看到pycharm右下角文件的编码方式, 如果编码方式不一致,则在设置中修改编码方式: http://jingyan.baidu.com/article/c843ea0ba55f0977931e ...

  6. 清空Fragment回退栈中某个Fragment之上的所有Fragment

    根据debug信息查看Fragment回退栈的情况,具体debug代码如下: int num = getActivity().getSupportFragmentManager().getBackSt ...

  7. 13 KNN背景分割器

    传统的前景背景分割方法有GrabCut,分水岭算法,当然也包括一些阈值分割的算法.但是这些算法在应用中往往显得鲁棒性较弱,达不到一个好的分割效果. 现代的背景分割算法融入了机器学习的一些方法来提高分类 ...

  8. bootstrap设计进度条和圆点

    1.设计进度条.文字前面的圆点和图片 2.思路: (1)设计进度条 (a) 进度条有滚动效果,要加上类.active (b)进度条的颜色通过类.progress-bar-success来写,可以写成. ...

  9. 栈和队列&前缀,中缀,后缀

    1.堆和栈的区别? (1)栈内存操作系统来分配,堆内存由程序员自己来分配. (2)栈有系统自动分配,只要栈 剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出. 2.栈(线性表) 仅 ...

  10. luogu3343 [ZJOI2015]地震后的幻想乡

    ref 前置技能是bzoj的串珠子.这种子集dp好神啊qwq. 还有这种钦定点转移子集的方法建议按这题的方法写,不要看串珠子qwq #include <iostream> #include ...