Hot Reloading w Pythonie

17

Cześć wszystkim,
Jakbyscie byli zainteresowani tematem hot reloadingu to polecam moja paczkę reloadium.
https://github.com/reloadware/reloadium

Umożliwia ona modyfikację kodu w trakcie działania aplikacji.
example_small.gif
Napisałem też plugin do PyCharma
https://plugins.jetbrains.com/plugin/18509-reloadium

Jestem ciekaw co o tym myślicie.

1

Hmm, ciekawe sprawdzę dziś, ale szczerze nie widzę zastosowania dla większych projektów.

4

@veneficus

Wręcz przeciwnie, zmiana kodu w locie jest jedną z najużyteczniejszych rzeczy przy debugowaniu i im większy projekt, im więcej trzeba pozmieniać aby wprowadzić system w określony stan tym bardziej się taki feature przydaje

@Kwazar90:

A jak wygląda wsparcie dla przeskakiwania do różnych linii kodu? np. z 1 do 3, wykonanie 4, dopisanie 5 i jej wykonanie, a na końcu powrót do 1?

1

@1a2b3c4d5e: Tak te funkcje sa wspierane. Dodatkowo jak uzytkownik sie pomyli mozna poprawic bledy jak ponizej:

image

1

Mógłbyś tak high levelowo opisać jak to działa?

3

@1a2b3c4d5e: Kod nowego modulu jest wykonywany w sandboxie po czym sa wykrywane i dodawane zmiany. Jezeli zmiana jest w trakcie debugowania jak pokazane powyzej to dodatkowo funkcja w ktorej jest debugger jest restartowana.

1

Nie widzę listy wspieranych urządzeń na GH, Python 3.10, OSX, Pycharm professional, Nie ma wsparcia dla wszystkiego?
screenshot-20220416205237.png

0

@veneficus: Czy to jest OSX ARM64? Wszystkie systemy sa wspierane oprocz tego wlasnie. Aktualnie nie da sie zbudowac paczek na ten system na github actions.
I racja, musze to dodac na githubie.

1

A masz jakiś sensowny przykład kiedy to by miało sens? Jakiś scenariusz?

0

@TomRiddle:

Puszczam kod który wykonuje SQLa i poleciał wyjątek, ale jako że nie chce mi się przygotowywać danych, ani aby odpalał się wcześniejszy kod jeszcze raz

void DoSomething(a,b,c)
{
	try
	{
		sql("SELEKT *", a,b,c);
	}
	catch (Exception ex)
	{
		
	}
}

to w obsłudze wyjątku dodałem linijkę która wykonuje tą samą funkcję jeszcze raz i przekazuje tam parametry

void DoSomething(a,b,c)
{
	try
	{
		sql("SELEKT *", a,b,c);
	}
	catch (Exception ex)
	{
		DoSomething(a,b,c);
	}
}

i teraz gdy jestem tu

void DoSomething(a,b,c)
{
	try
	{ <------------------- jestem tu
		sql("SELEKT *", a,b,c);
	}
	catch (Exception ex)
	{
		DoSomething(a,b,c);
	}
}

to zmieniam to zapytanie, puszczam niech wykona

void DoSomething(a,b,c)
{
	try
	{
		sql("SELECT *", a,b,c);
	}  <------------------- jestem tu
	catch (Exception ex)
	{
		DoSomething(a,b,c);
	}
}

i teraz usuwam to co dodałem

void DoSomething(a,b,c)
{
	try
	{
		sql("SELEKT *", a,b,c);
	}  <------------------- jestem tu
	catch (Exception ex)
	{
 
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1