2008-12-28 30 views
6

關於如何在Python中使用線程的一般教程或很好的資源?Python中的線程

何時使用線程,它們是如何有效的,以及線程[Python特有的]的一般背景?

回答

13

當你想讓兩件東西一次運行,或者希望在後臺運行而不減慢主流程時,應該使用線程。
我的建議是隻使用線程,如果你必須。它們通常會增加程序的複雜性。
穿線的主要文件是在這裏:http://docs.python.org/library/threading.html
一些例子在這裏:
http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/1/
http://linuxgazette.net/107/pai.html
http://www.wellho.net/solutions/python-python-threads-a-first-example.html

1

有幾個教程here

3

有一個了不起的pdf,Tutorial on Threads Programming with Python作者: 加州大學戴維斯分校的Norman Matloff和Francis Hsu。

應儘可能避免使用線程。它們增加了很多複雜性,同步問題和難以調試的問題。但是,有些問題需要它們(即GUI編程),但是如果可以的話,我鼓勵您尋找單線程解決方案。

+3

對不起,線程不應該「儘可能避免」,它們也不是GUI編程所必需的。 – 2008-12-28 19:14:09

8

在花費時間和精力編寫多線程Python應用程序之前要記住的一件事是,有一個Global Interpreter Lock(GIL),所以實際上一次不會運行多個線程。

這使得線程不適合嘗試利用多個內核或CPU。您可能會通過複用其他資源(網絡,磁盤,...)來加快速度,但根據我的經驗,這一點從未特別明顯。

一般來說,我只在一次發生幾個邏輯上分離的任務時使用線程,但我希望它們都在同一個VM中。一個線程從Web上提取數據並將其放在Queue上,而另一個線程從Queue中彈出並寫入數據庫,就像這樣。

在Python 2.6中,有一個新的multiprocessing模塊非常酷 - 它有一個非常類似於threading模塊的接口,但實際上產生了新的OS進程,避開了GIL。