Piszę aplikację GUI, która regularnie pobiera dane przez połączenie internetowe. Ponieważ pobieranie trwa chwilę, powoduje to, że interfejs użytkownika nie odpowiada podczas procesu pobierania (nie można go podzielić na mniejsze części). Dlatego chciałbym przekazać połączenie internetowe do osobnego wątku roboczego.
[Tak, wiem, teraz mam dwa problemy .]
W każdym razie aplikacja korzysta z PyQt4, więc chciałbym wiedzieć, jaki jest lepszy wybór: użyć wątków Qt czy użyć threading
modułu Python ? Jakie są zalety / wady każdego z nich? A może masz zupełnie inną sugestię?
Edycja (re bounty): Chociaż rozwiązaniem w moim konkretnym przypadku prawdopodobnie będzie użycie nieblokującego żądania sieciowego, takiego jak zasugerowali Jeff Ober i Lukáš Lalinský (więc zasadniczo pozostawiając problemy z współbieżnością implementacji sieciowej), nadal chciałbym uzyskać więcej dogłębna odpowiedź na ogólne pytanie:
Jakie są zalety i wady używania wątków PyQt4 (tj. Qt) w porównaniu z natywnymi wątkami Pythona (z threading
modułu)?
Edycja 2: Dziękuję wszystkim za odpowiedzi. Chociaż nie ma 100% zgodności, wydaje się, że istnieje powszechna zgoda co do tego, że odpowiedzią jest „użyj Qt”, ponieważ zaletą tego jest integracja z resztą biblioteki, która nie powoduje żadnych rzeczywistych wad.
Wszystkim, którzy chcą wybrać jedną z dwóch implementacji wątków, bardzo polecam przeczytanie wszystkich odpowiedzi tutaj udzielonych, w tym wątku listy dyskusyjnej PyQt, do którego opat prowadzi linki.
Było kilka odpowiedzi, które rozważałem w sprawie nagrody; w końcu wybrałem opata jako bardzo istotne odniesienie zewnętrzne; było to jednak mało prawdopodobne.
Dzięki jeszcze raz.