使用Python已经有段时间了,一直想学一下多线程编程,一直被耽搁,这次好好学习一下,写篇博客,作为以后的参考,好记性不如烂笔头,这句话的理解越来越深刻。参考《Python 标准库》,来写这篇文章的,有不足的地方,大家可以提出。
python多线程有多种方法,这里只是写threading的方法,个人觉得,学会一种其他的就容易理解,现在开始正文。
一、Thread对象。使用thread最简单的方法就是用一个目标函数实例化一个Thread对象,并调用start()让它开始工作,代码如下:
import threading
import time
def worker():
print 'worker'
time.sleep(1)
threads = []
for i in range(5):
t = threading.Thread(target = worker)
threads.append(t)
t.start()
结果如下:
worker
worker
worker
worker
worker
[Finished in 1.2s]
解释:很简单的,调用了5个线程,执行了worker函数,并且打印出worker,有兴趣的同学,可以不使用线程,只是循环5次调用worker函数,打印worker,执行时间较长,多线程的效率高很多。多线程的原理就是主函数只要创建线程就可以了,线程来执行函数,所以创建线程时间很短。而不使用多线程的情况,主函数需要在每次循环中调用worker函数,打印worker结束后,才能执行第二次循环,然后再打印,以此类推,所以执行时间较长,个人认为这是多线程的思想,以前不理解,所以记录下来,有错误的请大家指正。
二,传递参数。创建一个线程,并且向它传递参数,告诉它需要完成什么工作,这会很有用,下面的代码就是传递了一个参数,线程打印出这个参数,代码如下:
import threading
import time
def worker(num):
print 'worker: ',str(num)
time.sleep(1)
threads = []
for i in range(5):
t = threading.Thread(target = worker,args = (i,))
threads.append(t)
t.start()
结果如下:
worker: 0
worker: 1
worker: 2
worker: 3
worker: 4
[Finished in 1.4s]
解释:代码很简单,应该很容易看的懂,这个地方着重注意是传递参数的方法,args = (),务必注意是传递的元组,如果只有一个参数,则需要注意参数后加","。
未完待续