2013-06-05 17 views
6

Potrzebuję przetłumaczyć mój kod C# na Pythona. Mam zadanie w języku C# i trzeba przetłumaczyć go na python. Oto fragment kodu:Co to jest odpowiednik zadania C# w pytonie

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

Ten mały fragment kodu jest niezbędny do uruchomienia mojego programu. Potrzebuję Pythona, aby uruchomić wszystkie zadania na liście w osobnych wątkach i zablokować główny wątek, aż wszystkie zadania zostaną ukończone. Czy python ma tę funkcjonalność?

Odpowiedz

0

Zadanie jest po prostu operacją, działającą jako jej własny wątek. Po prostu stwórz wątek i pozwól mu zrobić coś konkretnego, a ty masz swoje zadanie.

+3

To nie jest poprawne. .NET 'Zadanie' może * być zaplanowane na inny wątek, ale nie zawsze tak jest, aw większości sytuacji działają one na puli wątków, a nie na każdym. Zwykle zbyt marnotrawstwo, aby wydzielić wątek dla każdego zadania. –

+0

Nawet jeśli wątek pochodzi z puli wątków, jest to jego własny wątek na czas trwania zadania. Co jest powodem, aby nie używać puli wątków do długotrwałych zadań. – SamiHuutoniemi

+0

Być może błędnie przeczytałem twoją wiadomość, za którą przepraszam. To jest rzeczywiście poprawne. –

1

muszę Python uruchomić wszystkie zadania na liście, a następnie zablokować główny wątek, dopóki wszystkie zadania zakończone są.

Głównym przypadek użycia dla Task jest unikaj blokowania głównego wątku, tak więc użytkownik może współdziałać z aplikacją podczas gdy praca jest popychany do różnych wątków.

Czy próbujesz wprowadzić równoległość pomiędzy poszczególnymi dziełami?
Jeśli używasz Python 3.2, to jest concurrent.futures, który w pewien sposób wygląda na TPL.

+1

Zadania mogą pomóc w uniknięciu blokowania głównego wątku, ale w tym konkretnym przykładzie nawet w pierwotnym programie główny wątek jest blokowany, czekając na wykonanie wszystkich zadań. Zgaduję, że nie stanowi to problemu dla danego programu. – redtuna

+0

@retuna: Dokładnie. Mimo że główny wątek jest zablokowany, poszczególne zadania przebiegają równolegle w jego przykładzie, więc pomyślałem, że tego właśnie chce. –

Powiązane problemy