python的并行开发有两种方式:fork和thread(线程)。thread比fork更轻量级,具有更好运行效率和可移植性,在需要进行并行操作的场合首推thread。
python标准库内置一个thread模块,该模块提供一个轻便简易的多线程编程接口,可以无需任何修改就能够运行在Win、Solaris、Linux等操作系统上。浏览一下thread模块:
import thread
dir(thread)
看到
['LockType', '__doc__', '__name__', '_local', 'allocate', 'allocate_lock', 'error', 'exit', 'exit_thread', 'get_ident', 'interrupt_main', 'stack_size', 'start_new', 'start_new_thread']
创建线程是我们的首要任务,我们将要用到的是start_new和start_new_thread方法,我们推荐start_new_thread,因为start_new已经是陈旧的版本。下面的代码展示了如何创建线程:
import thread
def childthread(threadid):
print 'I am child thread',threadid
def parentthread():
i=0
while 1:
i+=1
thread.start_new_thread(childthread,(i,))
if raw_input()=='q':break
parentthread()
运行该程序会看到如下效果:
I am child thread 1
I am child thread 2
I am child thread 3
q
每次按下回车,屏幕上就会出现一行来自start_new_thread所创建的线程的信息,知道我们输入q按回车为止。
可见thread模块通过start_new_thread给我们提供一个基于函数的线程创建接口。 start_new_thread方法有两个参数,第一个参数是我们预定义的函数(这里是childthread),也就是我们想要创建的线程体;第二个 参数是一个tuple(元组),罗列线程体的函数的所有参数,为什么要用一个tuple呢?python很具灵活性,因为不管线程体有多少个参数,通过一 个tuple我们就可以传递足够的参数,这里我么传递一个(i,)的tuple,表示只有一个参数。