2013-06-05 17 views
6

我需要將我的c#代碼翻譯爲python。我有一個在C#中的任務,並需要將其轉換爲Python。下面是一段代碼:什麼是python中的C#任務相當於

List<Task> t = new List<Task>(); 
for(int i = 0; i < _tasks.Count; i++) 
{ 
    var theTask = _tasks[i]; 
    t.Add(Task.Factory.StartNew(() => theTask.SAPTask.Execute(theTask.index, theTask.WindowCount))); 
} 
t.ForEach(x => x.Wait()); 

這段小小的代碼對於運行我的程序至關重要。我需要python運行列表中的所有任務在單獨的線程,並阻止主線程,直到所有的任務完成。 python是否有這個功能?

回答

0

任務只是一個操作,作爲它自己的一個線程運行。只需製作一個線索,讓它做一些特定的事情,並且你有你的任務。

+3

這是不正確的。 .NET'Task's *可能被安排在不同的線程上,但事實並非總是如此,並且在大多數情況下,它們運行在一個線程池中,而不是每個線程都獲得它們自己的線程。爲每項任務分配一個線程通常太浪費了。 –

+0

即使線程來自線程池,它也是任務持續時間的線程。這是不對長時間運行的任務使用線程池的原因。 – SamiHuutoniemi

+0

也許我誤解了你的信息,對此我表示歉意。這確實是正確的。 –

1

我需要的Python到列表中的運行所有任務,然後直到所有的任務都完成阻塞主線程。

主要用例Task避免阻塞主線程,因此用戶可以在工作被推向不同的線程與應用程序進行交互。

你只是試圖在個人作品之間實現並行性嗎?
如果您使用的是Python 3.2,則有concurrent.futures,它確實看起來像TPL。

+1

任務可能有助於避免阻塞主線程,但在此特定示例中,即使在原始程序中,主線程也會被阻塞,等待所有任務完成。我猜這對手頭的節目來說不是問題。 – redtuna

+0

@retuna:沒錯。儘管主線程被阻塞,但在他的例子中,各個任務同時運行,所以我想這就是他想要的。 –