Spojrzałem na marynatę dokumentację , ale nie rozumiem, gdzie jest przydatna marynata.
Jakie są typowe przypadki użycia marynaty?
python
serialization
pickle
use-case
satoru
źródło
źródło
Odpowiedzi:
Niektóre zastosowania, z którymi się spotkałem:
1) zapisywanie danych stanu programu na dysku, aby mógł on kontynuować od miejsca, w którym został przerwany po ponownym uruchomieniu (trwałość)
2) wysyłanie danych Pythona przez połączenie TCP w systemie wielordzeniowym lub rozproszonym (krosowanie)
3) przechowywanie obiektów Pythona w bazie danych
4) konwertowanie dowolnego obiektu Pythona na ciąg znaków, aby można go było użyć jako klucza słownika (np. Do buforowania i zapamiętywania).
Z tym ostatnim jest kilka problemów - dwa identyczne obiekty mogą zostać wytrawione i spowodować powstanie różnych łańcuchów - lub nawet ten sam obiekt dwukrotnie marynowany może mieć różne reprezentacje. Dzieje się tak, ponieważ marynata może zawierać informacje o liczbie referencyjnej.
Aby podkreślić komentarz @ lunaryorn - nigdy nie powinieneś usuwać łańcucha z niezaufanego źródła, ponieważ starannie spreparowana marynata może wykonać dowolny kod w twoim systemie. Na przykład patrz https://blog.nelhage.com/2011/03/exploiting-pickle/
źródło
Minimalny przykład podróży w obie strony.
Edit: ale jak na pytanie o konkretne przykłady z zalewą, być może na najbardziej zaawansowanym wykorzystaniu trawienia (trzeba by kopać bardzo głęboko do źródła) jest ZODB: http://svn.zope.org/
W przeciwnym razie PyPI wspomina o kilku: http://pypi.python.org/pypi?:action=search&term=pickle&submit=search
Osobiście widziałem kilka przykładów piklowanych obiektów przesyłanych przez sieć jako łatwy w użyciu protokół transferu sieciowego.
źródło
W przypadku obliczeń rozproszonych i równoległych wytrawianie jest absolutnie konieczne.
Załóżmy, że chcesz wykonać równoległą redukcję mapy z
multiprocessing
(lub między węzłami klastra za pomocą pyina ), a następnie musisz upewnić się, że funkcja, którą chcesz zmapować w równoległych zasobach, będzie się trawić. Jeśli się nie wytrawia, nie możesz wysłać go do innych zasobów w innym procesie, komputerze itp. Zobacz także tutaj dobry przykład.Aby to zrobić, używam koperku , który może serializować prawie wszystko w Pythonie. Dill ma również dobre narzędzia, które pomogą ci zrozumieć, co powoduje niepowodzenie wytrawiania, gdy kod nie działa.
I tak, ludzie używają wybierania, aby zapisać stan obliczeń, sesję ipython lub cokolwiek innego.
źródło
Użyłem go w jednym z moich projektów. Jeśli aplikacja została zakończona w trakcie działania (wykonała długie zadanie i przetworzyła wiele danych), musiałem zapisać całą strukturę danych i załadować ją ponownie po ponownym uruchomieniu aplikacji. Użyłem do tego cPickle, ponieważ szybkość była kluczowa, a rozmiar danych był naprawdę duży.
źródło
Pickle działa jak „Zapisz jako…” i „Otwórz…” dla struktur i klas danych. Powiedzmy, że chcę zapisać moje struktury danych, aby były trwałe między uruchomieniami programu.
Oszczędność:
Ładowanie:
Teraz nie muszę od nowa budować myStuff od zera i mogę po prostu wybrać (le) od miejsca, w którym przerwałem.
źródło
Początkującym (tak jak u mnie) naprawdę trudno jest zrozumieć, po co w pierwszej kolejności używać marynaty, czytając oficjalną dokumentację . Może dlatego, że dokumentacja sugeruje, że znasz już cały cel serializacji. Dopiero po przeczytaniu ogólnego opisu serializacji zrozumiałem powód tego modułu i jego typowe przypadki użycia. Pomocne mogą być również obszerne wyjaśnienia dotyczące serializacji z pominięciem określonego języka programowania: https://stackoverflow.com/a/14482962/4383472 , Co to jest serializacja? , https://stackoverflow.com/a/3984483/4383472
źródło
Aby dodać przykład ze świata rzeczywistego: narzędzie dokumentacyjne Sphinx dla Pythona używa pickle do buforowania przeanalizowanych dokumentów i odsyłaczy między dokumentami, aby przyspieszyć tworzenie kolejnych dokumentów.
źródło
Mogę powiedzieć, do jakich zastosowań go używam i widziałem, jak jest używany do:
To są te, dla których go używam
źródło
Używam wytrawiania podczas złomowania stron internetowych w tym czasie chcę przechowywać ponad 8000 tys. Adresów URL i chcę je przetwarzać tak szybko, jak to możliwe, więc używam wytrawiania, ponieważ jego jakość wyjściowa jest bardzo wysoka.
możesz łatwo dotrzeć do adresu URL i gdzie zatrzymać nawet słowo kluczowe katalogu zadań, a także bardzo szybko pobrać szczegóły adresu URL w celu wznowienia procesu.
źródło