Ostatnio zauważyłem, że Python używa tylko jednego rdzenia na raz. Czy istnieje sposób, może specjalne kompilacje lub polecenia, aby wykorzystywał wszystkie zasoby (drugi rdzeń)?
Ostatnio zauważyłem, że Python używa tylko jednego rdzenia na raz. Czy istnieje sposób, może specjalne kompilacje lub polecenia, aby wykorzystywał wszystkie zasoby (drugi rdzeń)?
Odpowiedzi:
Możesz użyć podprocesów, aby skorzystać z wielu rdzeni w skrypcie Python, dzięki czemu kilka zadań może działać równolegle. Ale nie można podzielić jednego zadania na kilka rdzeni. Zobacz szczegółowe wyjaśnienie w tym FAQ: Czy ArcGIS 10 obsługuje procesory wielordzeniowe i / lub 64-bitowe systemy operacyjne?
Jeśli jesteś wytrawnym użytkownikiem Pythona, możesz zainteresować się podejściem wyjaśnionym w tej prezentacji użytkownika z Dev Summit 2014, o nazwie Równoległe geoprzetwarzanie z wykorzystaniem Python Multiprocessing and Critical Path Methodology , jednak nie pozwoli ci to na użycie kilku rdzeni dla to samo zadanie.
W przeciwnym razie będziesz musiał poczekać na wydanie ArcGIS Pro (aplikacja w pełni 64-bitowa) w tym roku, aby sprawdzić, jak działa wielowątkowość ... (lub wypróbuj wersję beta teraz)
Jak niektórzy wspomnieli, w ArcGIS Desktop nie ma obsługi wieloprzetwarzania. Mówiąc o przetwarzaniu zestawów danych GIS w środowisku komputerowym, próbuję dowiedzieć się, czy mogę podzielić duży przepływ pracy na mniejsze fragmenty, które zostaną obliczone w tym samym czasie, ładując wiele rdzeni. Prawie każdy przypadek powinien zostać zbadany indywidualnie, ponieważ zachowania narzędzi GP mogą się znacznie różnić.
Zastanów się, co można zrobić szybciej, rozwiązując prosty problem matematyczny. Jaki jest najszybszy sposób na policzenie wszystkich liczb od 1 do 100?
1) poprzez zsumowanie wyników jeden po drugim i dodawanie do siebie sumy przyrostowo (1 + 2 = 3, 3 + 3 = 6,6 + 4 = 10 i tak dalej). Jeden rdzeń pracuje nad tym zadaniem.
2) wcześniej podziel wartości na poszczególne części i najpierw zsumuj wartości (od 1 do 30, 31 do 60 i 60 do 100). Trzy rdzenie będą działać jednocześnie (ostatnim krokiem byłoby zsumowanie trzech otrzymanych wartości).
Ponieważ różne narzędzia GP są implementacjami różnych algorytmów z różną notacją big-O , prawdopodobnie będziesz musiał podejść do nich inaczej pod względem przesyłania wielu procesów.
Dobrym punktem wyjścia byłoby poznanie działania biblioteki wieloprocesowej w Pythonie. Używam dość mocno.
Zauważyłem również, że uruchamianie skryptów Pythona z wiersza polecenia przy użyciu 64-bitowego języka Python zwykle powoduje szybsze działanie (w porównaniu z uruchomieniem IDE, ale może nie być tak na twoim komputerze). Geoprzetwarzanie w tle zostało wprowadzone w 10.1, ale spróbuj uruchomić skrypty Pythona w 64-bitowym języku Python i zobacz, jak wpływa to na wydajność.
ArcGIS Pro wymieniony w innej odpowiedzi jest dostępny w wersji beta 5 do pobrania (pamiętaj, że aby zgłosić wszelkie błędy i mieć dostęp do konta ArcGIS Online dla Organizacji, musisz być uczestnikiem społeczności Esri Beta , aby móc uruchom Pro).
Pypy to zgodna wersja Pythona, która działa 4-5 razy szybciej niż CPython („standardowy” python).
Jeśli masz dość odwagi, aby zbudować go ze źródła, istnieje gałąź, która „może równolegle uruchamiać wiele niezależnych wątków wymagających CPU.” Oznacza to, że zyskujesz zalety wielowątkowości bez konieczności ponownego pisania kodu.
Prosta odpowiedź to nie. To zależy od lepszej odpowiedzi.
Ze względu na implementację CPython (najczęściej używanego Pythona) można bezpiecznie założyć, że Twój Python nie może faktycznie korzystać z wielowątkowości. Widzieć:
http://en.wikipedia.org/wiki/Global_Interpreter_Lock
https://wiki.python.org/moin/GlobalInterpreterLock
Zauważ, że IO jest odporny na GIL.
Teraz możesz nad tym popracować. Jak zauważyli inni, możesz odradzać podprocesy, a biblioteka wieloprocesowa może ci pomóc.
Nie mogę rozwiązać problemów ArcGIS, ale jeśli chodzi o przetwarzanie wielu zadań za pomocą Pythona, czy zastanawiałeś się nad menedżerem zadań takim jak Celery (celeryproject.org)? Wymagałoby to zidentyfikowania różnych zadań przetwarzania, przekazania ich do „menedżera” w celu dystrybucji, uruchomienia „pracowników” otrzymujących zadania od menedżera, przetworzenia ich i przedstawienia wyników.
Nie jest to łatwe do wdrożenia, ale ma niewiarygodną elastyczność i pozwala w pełni wykorzystać możliwości przetwarzania (tj. Użyć tych wolnych rdzeni).