多线程学习过程记录(python)
2014-03-02 21:17
337 查看
1.什么是多线程?
进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程可以由多个线程组成。
线程:是程序中的一个执行流,每个线程都有自己的专用寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
多线程:指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好与不好:
利:提高CPU的利用率,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待。提高程序的效率。
弊:线程也是程序,需要占用内存,线程越多占用内存越多;多线程之间需要协调管理;线程之间对共享资源的访问会相互影响。
生活例子:
多线程:你可以一心多用,在烧水的同时洗着菜并且听着音乐。
单线程:必须一心一用,烧着水的时候,什么都不能做,一直等着水开了,才能去洗菜,洗完菜才可以听音乐,所有的事情不能同时执行,必须执行完一个才能进行下一个。
伪代码:
While(condition)
{
Fun1();
Fun2();
}
若Fun1执行时间太长,Fun2就不能得到即时的执行,如果把两个过程独立在不同的线程中来处理,那么两个线程都可以得到即时的执行。
2.为什么要用多线程?
应用场景:
想要同时处理多件事:单线程处理不了的,必须使用多线程。(类似于分身术)
多个线程分解大任务:用单线程可以做的,但是使用多线程可以更快。(类似于左右开弓)
场景描述:
执行实际工作20秒钟,20秒时间到介绍执行。
使用两个线程,一个用于计时,一个用于执行实际工作。在执行实际工作的线程启动前启动计时线程。
3.多线程怎样实现?(python)
Python使用线程有两种方式:函数或者用类来包装线程对象。
1)函数式
import time
import _thread
def timer(num,interval):
cnt = 0
print("121")
while cnt<10:
print("Thread:(%d) Time:%s\n"%(num,time.ctime()))
time.sleep(interval)
cnt = cnt+1
_thread.exit_thread()
def test():
_thread.start_new_thread(timer,(1,1))
_thread.start_new_thread(timer,(2,2))
if __name__ == "__main__":
test()
2)创建子类来包装一个线程对象
import threading
import time
class timer(threading.Thread):
def __init__(self,num,interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self):
while not self.thread_stop:
print("ThreadObject(%d),Time:%s\n"%(self.thread_num,time.ctime()))
time.sleep(self.interval)
def stop(self):
self.thread_stop = True
def test():
thread1 = timer(1,1)
thread2 = timer(2,2)
thread1.start()
thread2.start()
time.sleep(10)
thread1.stop()
thread2.stop()
return
if __name__ == "__main__":
test()
【参考资料】:
http://blog.csdn.net/zhaonanemail/article/details/7175449
http://bbs.csdn.net/topics/300001225
http://blog.csdn.net/nidexuanzhe/article/details/6624444
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html
进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程可以由多个线程组成。
线程:是程序中的一个执行流,每个线程都有自己的专用寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。
多线程:指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是允许单个程序创建多个并行执行的线程来完成各自的任务。
多线程的好与不好:
利:提高CPU的利用率,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待。提高程序的效率。
弊:线程也是程序,需要占用内存,线程越多占用内存越多;多线程之间需要协调管理;线程之间对共享资源的访问会相互影响。
生活例子:
多线程:你可以一心多用,在烧水的同时洗着菜并且听着音乐。
单线程:必须一心一用,烧着水的时候,什么都不能做,一直等着水开了,才能去洗菜,洗完菜才可以听音乐,所有的事情不能同时执行,必须执行完一个才能进行下一个。
伪代码:
While(condition)
{
Fun1();
Fun2();
}
若Fun1执行时间太长,Fun2就不能得到即时的执行,如果把两个过程独立在不同的线程中来处理,那么两个线程都可以得到即时的执行。
2.为什么要用多线程?
应用场景:
想要同时处理多件事:单线程处理不了的,必须使用多线程。(类似于分身术)
多个线程分解大任务:用单线程可以做的,但是使用多线程可以更快。(类似于左右开弓)
场景描述:
执行实际工作20秒钟,20秒时间到介绍执行。
使用两个线程,一个用于计时,一个用于执行实际工作。在执行实际工作的线程启动前启动计时线程。
3.多线程怎样实现?(python)
Python使用线程有两种方式:函数或者用类来包装线程对象。
1)函数式
import time
import _thread
def timer(num,interval):
cnt = 0
print("121")
while cnt<10:
print("Thread:(%d) Time:%s\n"%(num,time.ctime()))
time.sleep(interval)
cnt = cnt+1
_thread.exit_thread()
def test():
_thread.start_new_thread(timer,(1,1))
_thread.start_new_thread(timer,(2,2))
if __name__ == "__main__":
test()
2)创建子类来包装一个线程对象
import threading
import time
class timer(threading.Thread):
def __init__(self,num,interval):
threading.Thread.__init__(self)
self.thread_num = num
self.interval = interval
self.thread_stop = False
def run(self):
while not self.thread_stop:
print("ThreadObject(%d),Time:%s\n"%(self.thread_num,time.ctime()))
time.sleep(self.interval)
def stop(self):
self.thread_stop = True
def test():
thread1 = timer(1,1)
thread2 = timer(2,2)
thread1.start()
thread2.start()
time.sleep(10)
thread1.stop()
thread2.stop()
return
if __name__ == "__main__":
test()
【参考资料】:
http://blog.csdn.net/zhaonanemail/article/details/7175449
http://bbs.csdn.net/topics/300001225
http://blog.csdn.net/nidexuanzhe/article/details/6624444
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html
相关文章推荐
- python学习笔记,以此开始记录自己的python学习过程
- Python学习过程中的错误记录——有关elif
- Ubuntu中python环境下import requests错误的解决(学习过程问题记录)
- 对python学习过程的记录
- python学习过程中遇到的模块记录
- python多线程学习记录
- python 多线程学习记录
- 【Python3.6爬虫学习记录】(十一)使用代理IP及用多线程测试IP可用性--刷访问量
- 黑马程序员Java培训、Android培训-Java 学习过程记录_多线程2
- 黑马程序员Java培训、Android培训-Java 学习过程记录_多线程3
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7
- 【Python3.6爬虫学习记录】(十四)多线程爬虫模板总结
- 【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )
- 多线程系列七:记录一次学习项目性能优化的过程及心得
- 开始写blog记录下学习python的过程
- 学习python过程遇到的问题与记录
- 关于python的wordcloud的学习过程的记录
- 记录学习Python过程中的各种坑
- NVIDIA DIGITS 5.1-dev学习笔记之安装过程记录:Windows10 x64位系统 、 MicroSoft Caffe Master、CUDA 8.0 、Python 2.7