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,表示只有一個參數。