Python 多线程
2015-12-08 11:46
561 查看
进程是由若干线程组成的,一个进程至少有一个线程。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。
1、 Python threading模块:
Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:
执行结果:
2、 Python 多线程实例:
首先导入threading 模块,这是使用多线程的前提。
创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。
接着以同样的方式创建线程t2,并把t2也装到threads数组。
最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
运行结果:
从执行结果来看,子线程(muisc 、move )和主线程(print “all over %s” %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。
3、threading.thread():
python 使用
threading.thread(target=函数名,args=函数变量名),代码中一般赋值于一个线程来进行相关处理,如:
参考链接:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832360548a6491f20c62d427287739fcfa5d5be1f000
http://www.cnblogs.com/fnng/p/3670789.html
4000
1、 Python threading模块:
Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:
import time, threading # 新线程执行的代码: def loop(): print 'thread %s is running...' % threading.current_thread().name n = 0 while n < 5: n = n + 1 print 'thread %s >>> %s' % (threading.current_thread().name, n) time.sleep(1) print 'thread %s ended.' % threading.current_thread().name print 'thread %s is running...' % threading.current_thread().name t = threading.Thread(target=loop, name='LoopThread') t.start() t.join() print 'thread %s ended.' % threading.current_thread().name
执行结果:
thread MainThread is running... thread LoopThread is running... thread LoopThread >>> 1 thread LoopThread >>> 2 thread LoopThread >>> 3 thread LoopThread >>> 4 thread LoopThread >>> 5 thread LoopThread ended. thread MainThread ended.
2、 Python 多线程实例:
#coding=utf-8 import threading from time import ctime,sleep def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime()) sleep(1) def move(func): for i in range(2): print "I was at the %s! %s" %(func,ctime()) sleep(5) threads = [] t1 = threading.Thread(target=music,args=(u'爱情买卖',)) threads.append(t1) t2 = threading.Thread(target=move,args=(u'阿凡达',)) threads.append(t2) if __name__ == '__main__': for t in threads: t.setDaemon(True) t.start() print "all over %s" %ctime()
import threading
首先导入threading 模块,这是使用多线程的前提。
threads = [] t1 = threading.Thread(target=music,args=(u'爱情买卖',)) threads.append(t1)
创建了threads数组,创建线程t1,使用threading.Thread()方法,在这个方法中调用music方法target=music,args方法对music进行传参。 把创建好的线程t1装到threads数组中。
接着以同样的方式创建线程t2,并把t2也装到threads数组。
for t in threads: t.setDaemon(True) t.start()
最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
setDaemon()setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被无限挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print “all over %s” %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。
start()开始线程活动。
运行结果:
>>> ========================= RESTART ================================ >>> I was listening to 爱情买卖. Thu Apr 17 12:51:45 2014 I was at the 阿凡达! Thu Apr 17 12:51:45 2014 all over Thu Apr 17 12:51:45 2014
从执行结果来看,子线程(muisc 、move )和主线程(print “all over %s” %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。
3、threading.thread():
python 使用
threading.thread( )指明函数入口:
threading.thread(target=函数名,args=函数变量名),代码中一般赋值于一个线程来进行相关处理,如:
t1 = threading.thread(target=函数名1,args=函数变量名1) t2 = threading.thread(target=函数名2,args=函数变量名2) t1.start( ) t2.start( )
参考链接:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832360548a6491f20c62d427287739fcfa5d5be1f000
http://www.cnblogs.com/fnng/p/3670789.html
4000
相关文章推荐
- python 读取文件里的每行url 返回每个url请求响应页面的title!
- python之pillow的使用
- python语法笔记(四)
- python常用函数
- 【转】python中self cls的区别
- python-模块系列
- python基础之列表、字典、元祖等 (二)
- 转 Python集合(set)类型的操作
- 使用 Python 添加手机聚合平台教程
- python map(),zip(),filter()函数解析
- 关于python中中文显示问题
- 从后台看python--为什么说python是慢的
- python模块
- python基础教程共60课-第11课逻辑判断
- Learning Python(3)--正则表达式
- 学好 Python 的 11 个优秀资源【转载】
- python学习日记_第一天
- Python基础 —— sys 模块
- debug ipython notebook with breakpoint
- Python基础——timeit模块