您的位置:首页 > 编程语言 > Python开发

多线程学习过程记录(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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python 多线程 thread