2013-06-05 5 views
6

Ho bisogno di tradurre il mio codice C# in python. Ho un compito in C# e ho bisogno di tradurlo in python. Ecco un pezzo del codice:Qual è l'equivalente di un'attività C# in python

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()); 

Questo piccolo pezzo di codice è fondamentale per eseguire il mio programma. Ho bisogno di python per eseguire tutte le attività dell'elenco in thread separati e bloccare il thread principale fino al completamento di tutte le attività. Python ha questa funzionalità?

risposta

0

Un'attività è solo un'operazione, viene eseguita come una sua porzione. Basta fare una discussione e lasciar fare qualcosa di specifico, e hai il tuo compito.

+3

Questo non è corretto. .NET 'Task's * may * può essere pianificato su un thread diverso, ma questo non è sempre il caso, e nella maggior parte delle situazioni vengono eseguiti su un pool di thread, piuttosto che ognuno ne acquisisce uno proprio. Di solito è troppo dispendioso girare un thread per ogni attività. –

+0

Anche se il thread proviene da un pool di thread, è un thread di sua proprietà per la durata dell'attività. Quale è una ragione per non utilizzare il pool di thread per attività di lunga durata. – SamiHuutoniemi

+0

Forse ho letto male il tuo messaggio, per il quale mi scuso. Questo è davvero corretto. –

1

Ho bisogno Python per eseguire tutti i compiti nella lista e quindi bloccare il thread principale fino a quando tutte le attività vengano completate.

Il caso d'uso principale Task è quello di evitare bloccando il filo principale, in modo che l'utente può interagire con l'applicazione mentre il lavoro è spinto a diversi thread.

Stai solo cercando di attuare il parallelismo tra i singoli pezzi di lavoro?
Se stai usando Python 3.2, c'è concurrent.futures che sembra TPL in un certo senso.

+1

Le attività possono aiutare a evitare il blocco del thread principale, ma in questo particolare esempio anche nel programma originale il thread principale è bloccato in attesa del completamento di tutte le attività. Suppongo che non sia un problema per il programma a portata di mano. – redtuna

+0

@retuna: esattamente. Tuttavia, sebbene il thread principale sia bloccato, le singole attività vengono eseguite contemporaneamente nel suo esempio, quindi ho capito che era quello che voleva. –