Cześć,
Tworzę grę w szachy w pythonie, ostatnio gdy prosiłem o ocenę ktoś poradził mi aby obliczenia które wykonuje komputer aby wykonać ruch przenieść do innego wątku. Poczytałem trochę o nich ale nie wiem czy dobrze rozumiem. Samo stworzenie i użycie nowego wątku nie skróci oczekiwania na ruch komputera, musiałby wykonywać obliczenia gdy użytkownik jest czymś "zajęty" (np. animacją). Czy dobrze myślę?
W pythonie kod, która działa na CPU (czyli twój przypadek) będzie działał tylko na jednym wątku (poczytaj o GIL). Jeśli chcesz liczyć coś na wielu wątkach procesora to poczytaj o https://docs.python.org/2/library/multiprocessing.html . Inna sprawa, że cokolwiek napiszesz to i tak będzie wolne przez to jak działa python. Możesz próbować optymalizować kod, tak żeby działał szybciej na jednym wątku, możesz popróbować z PyPy. Używanie multiprocessingu to ostateczność
Jeżeli algorytm pozostanie taki sam, to obliczenia nie przyspieszą.
Zakładając, że tworzysz gui to niepożądanym jest, żeby aplikacja freezowała się podczas obliczeń. Skoro użytkownik i tak ma czekać, to lepiej dać mu animację coby się nie niepokoił. Możesz mu też dać jakieś opcje do poklikania sobie po planszy, przejrzenia historii ruchów czy rysowania po planszy.
Taką radę dają zwykle ci, co nigdy profesjonalnie z wątkami nie mieli do czynienia.
Lepiej poczytaj o algorytmie alfa-beta.
Tak wątki pozwalają robić obliczenia równolegle, ale problemy synchronizacji zwykle przerastają programistów nawet z wieloletnim doświadczeniem (najgorsi są ci, przekonani, że potrafią, a popełniają podstawowe błędy i mówią prosto w twarz "przecież działa").
Z tego co mi wiadomo, w python ciężkie obliczania po prostu przenosi się do innego procesu.
Dzięki za odpowiedź :)
mój algorytm wygląda tak:
[https://pastebin.com/bXwSQhPb]
Używam alpha-beta pruning ( albo tak mi się tylko wydaje :D)
Tutaj cały program:
[https://github.com/Suchy702/Szachy]
W pythonie kod, która działa na CPU (czyli twój przypadek) będzie działał tylko na jednym wątku (poczytaj o GIL).
Może coś źle rozumiem ale w moim programie można stworzyć osoby wątek nawet to robiłem, tylko mój program wtedy totalnie świrował bo tak jak napisał @MarekR22 wątki były żle używane.
Macie jakiś pomysł jak to przyśpieszyć ?