Wpis z mikrobloga

Napisałem implementację grafu w Pythonie, chciałbym wielokrotnie utworzyć graf z różnymi parametrami, wykonać pewną symulację a następnie zapisać wykresy z wynikami. Chciałem to zrobić korzystając z Multiprocessingu, jednak nie do końca działa to tak jak powinno. Wyniki się nie zgadzają, plus czasem wrzuca dwie serie danych na jeden wykres, co nie powinno mieć miejsca. Obstawiam, że wątki pracują na tych samych obiektach, ale nie do końca rozumiem dlaczego. Tu znajduje się fragment kodu o którym mowa Macie może pomysły skąd takie problemy? Będę bardzo wdzięczny za pomoc
#python #programowanie
  • 8
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Cookiee ok. Wykresy robisz za pomocą plt. We wszystkich wątkach pracujesz więc na jednym obiekcie. Nic więc dziwnego że czasem dwa wątki na raz zrobią zapis do niego. Działaj na ax i fig i za każdym razem rób nowe obiekty.

Co znaczy że masz dziwne wyniki? Nie miałem jeszcze czasu aby odpalić gdzieś Twój kod więc nie wiem co produkuje.
  • Odpowiedz
@pitersi: dziwne w takim sensie, że bywały piki na początku wykresu, które nie odpowiadają początkowym wartościom, ale jak tak teraz pomyślę, to mógł to być błąd właśnie z nieprawidłowym rysowaniem. Zastosuję Twoją poradę i dam znać, czy pomogło :)
  • Odpowiedz
@pitersi: teraz już działa, dziękuję Ci bardzo! Przy okazji miałbym jedno extra pytanie do Ciebie: w klasie Graph jest metoda simulate, masz może pomysł jak ją można przerobić by była bardziej 'pythonic', co uczyniłoby ją wydajniejszą? :)
  • Odpowiedz
Masz dobrą intuicję. Dało się coś poprawić. Troszkę być może przyspieszy:
numberofactives = sum(nbr.isactive for nbr in vert.getconnections())

Dodatkowo po co tworzysz getery? Jedź po atrybutach a jak będziesz w przyszłości potrzebował zrobić funkcję je kontrolującą zrób @ property

Dodatkowo możesz
  • Odpowiedz
@pitersi: dopiero teraz dostałem powiadomienie o Twojej odpowiedzi... dzięki za podpowiedzi, zaraz sprawdzę czy będą skuteczne :) a co do tych getterów to odruchowo je napisałem, na co dzień pracuję w Javie i stąd taki odruch :)
  • Odpowiedz