2012-12-18 109 views
0

我有一個在python中使用線程的代碼。每個線程如果滿足條件將創建2個新線程。現在問題是活動線程總數超過Ubuntu 12.04支持的活動線程總數。現在活動線程隊列中的每個線程都需要空間來創建新線程,然後它將終止。我的系統有8個CPU。現在我的代碼正在陷入僵局。線程隊列已滿 - python

+0

你可以發佈代碼嗎? – Blender

+0

請注意,CPython中有全局解釋器鎖(GIL),它可以防止您使用所有內核進行處理。另請參見[是否支持多處理器/多核編程?](http://stackoverflow.com/questions/203912/does-python-support-multiprocessor-multicore-programming)。 – bouke

+0

我嘗試了多處理,但它消耗了所有的內核,導致系統被掛起 – pratibha

回答

2

你可能不應該創建這麼多的線程。相反,請使用Queue.Queue在不同線程之間進行通信。

+0

這是一個很好的開始:http://effbot.org/librarybook/queue.htm –

+0

每個線程都是獨立的,他們不使用任何全局變量。如果我使用Queue,那麼我必須在啓動線程之前將它插入隊列中......如何將以下代碼轉換爲使用隊列'func(a,i):if a> i):func(a,i + 1), func(a-1,i);'我正在使用線程來處理2個獨立的遞歸調用。 – pratibha