Musiałem wykonać ciężką operację I/O bound, tj. Analizować duże pliki i konwertować z jednego formatu na inny. Początkowo robiłem to serialnie, tj. Parsowanie jeden po drugim ...! Wydajność była bardzo niska (wykorzystano 90+ sekund). Postanowiłem więc użyć wątków do poprawy wydajności. Stworzyłem jeden wątek dla każdego pliku. (4 wątki)Python wątek i wydajność?
for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()
Ale dla mojego zdziwienia, nie ma poprawy wydajności w ogóle. Teraz wykonanie zadania zajmuje około 90 sekund. Ponieważ jest to operacja związana z I/O, oczekiwałem poprawy wydajności.
Dzięki delty..Ale moduł do przetwarzania wieloprocesorowego ma własne problemy. 1) Muszę uzupełnić mój kod, ponieważ nie mogę użyć metod instancji .. 2) Mam metodę instancji, która ma wiele obsługi plików. Te procedury obsługi plików są zamknięte w procesach podrzędnych, co jest niedopuszczalne. Muszę więc otworzyć je ponownie. Niestety nie mam możliwości ich poznania, ponieważ są one przekazywane podczas tworzenia instancji – kumar
Nie musi to być sama funkcja konwersji wykonywana w oddzielnym procesie. Czy istnieje sposób, w jaki można wykonać tę instancję w oddzielnych procesach? Na przykład. napisać funkcję lub nawet osobny skrypt, który wykonuje pojedynczą instancję i konwersję; następnie napisz "skrypt główny", który używa modułu wieloprocesorowego do uruchamiania tych funkcji. Oddzielne skrypty można uruchamiać przy użyciu modułu [subprocess] (http://docs.python.org/library/subprocess.html). Jeśli jest wiele wspólnych danych, to tak, to jest, gdzie wieloprocesorowość staje się skomplikowana. Ale w tym module jest o wiele więcej narzędzi :) – detly