[ Pobierz całość w formacie PDF ]
.StartThreadStartThread jest funkcją, która będzie wykonana przez utworzony wątek.void *StartThread(void *arg){char cmd[256];PyThreadState *tstate;int loopcount = 0;int i = (int) arg; sprintf(cmd,"print 'Thread %d says hi!'\n",pthread_self());PyEval_AcquireLock(); /* przejmuje globalna blokade */tstate = PyThreadState_New(mainThreadState->interp);PyThreadState_Swap(tstate); /* uzyj tego nowego stanu watku */while(1) {Py_BEGIN_ALLOW_THREADSsleep(i);Py_END_ALLOW_THREADSif(0 != InterpretPythonString(cmd))break;if(2 import hostModule>>> hostModule.LaunchThread(10)1026>>> dir()Wykonujemy funkcję dir jedynie dla pokazania, że interpreter interakcyjny działa nadal pouruchomieniu wątku 1026 (przy użyciu funkcji LaunchThread).Należy zwrócić uwagę, żenumery wątków w systemie Linux są, w gruncie rzeczy numerami procesów, a zatem jest małoprawdopodobne, aby były takie same w kolejnych przebiegach:['__builtins__', '__doc__', '__name__', 'hostModule']>>> hostModule.LaunchThread(5)2051Uruchamiamy kolejny wątek:>>> Thread 1026 says hi!Thread 2051 says hi!>>> Thread 2051 says hi!Thread 1026 says hi!Thread 2051 says hi!>>> Thread 2051 says hi!Thread 1026 says hi!Thread 2051 exitingOba wątki drukują swoje komunikaty, a następnie wątek 2051 kończy działanie:>>> dir()['__builtins__', '__doc__', '__name__', 'hostModule', 'sys']To polecenie demonstruje, że interpreter Pythona nadal pracuje, nawet po tym jak wątek 2051obumarł:>>> Thread 1026 says hi!Thread 1026 exiting>>> hostModule.LaunchThread(1)3074>>> Thread 3074 says hi!Thread 3074 says hi!Thread 3074 says hi!Thread 3074 says hi!Thread 3074 exiting>>> ^DUruchamiamy jeszcze jeden wątek po tym jak pierwsze dwa obumarły, by definitywnie zakończyćprogram przy pomocy Ctrl D.Ogólne sugestieOpracowując nowe programy trzeba pamiętać, że często łatwiej jest modelować nowy program wPythonie, aniżeli pisać w języku C.Jeśli się okaże, że prototyp nie działa jak tego oczekiwano,można zapisać ponownie powolną część kodu w języku C jako moduł rozszerzenia.Takiehybrydowe podejście do opracowania oprogramowania pozwoli na szybsze uzyskanie wynikówniż w przypadku pisania wyłącznie programu w języku C.Programy C/C++ mogą poszerzyć znacznie zakres swoich możliwości w wyniku wbudowaniainterpretera Pythona.Statyczne programy stają się łatwiejsze do konfiguracji i wszechstronniejszewskutek umożliwienia ich użytkownikowi sterowania programem za pośrednictwem Pythona.Jakpoprzednio, podejście hybrydowe często umożliwia na imponujące skrócenie czasuopracowywania oprogramowania.Interpreter Pythona może być wykorzystany do zautomatyzowania procesu testowania modułów isystemu programów C/C++.Dzięki włączeniu do programu C w trakcie jego opracowywaniaoprzyrządowania testowego, można na bieżąco sprawdzać moduły programu przy użyciu skryptówPythona.Kolejne poprawki do programu mogą być szybko przetestowane i porównane zwynikami kontrolnymi dla wykrycia nieoczekiwanych efektów ubocznych.Zasoby onlineWięcej informacji o Pythonie można znalezć pod adresem: http://www.python.org.Aby dowiedzieć się więcej na temat generatora SWIG można zajrzeć pod adres:http://www.swig.org.PodsumowanieRozdział ten demonstruje w jaki sposób można poszerzyć Pythona przy użyciu zarównogeneratora SWIG jak i ręcznie napisanego kodu C/C++.Przy użyciu omówionych technik możnaudostępnić dla skryptów Pythona właściwie każdą funkcję, bibliotekę lub obiekt C++.Zobaczyliśmy, że generator SWIG może być użyty do szybkiego tworzenia funkcji interfejsuopartych na istniejących plikach nagłówkowych.Jednak, w niektórych przypadkach pewne jegoograniczenia mogą oznaczać konieczność dodatkowego ręcznego dostrojenia.Niemniej jednak, pliki dla klasy towarzyszącej generatora SWIG zapewniają wszechstronnymechanizm ułatwiający dostęp do struktur, podczas gdy dyrektywa %addmethods udostępniaużyteczne własności hermetyzujące, które często górują nad ograniczeniami SWIG.Badanieutworzonego przez SWIG pliku owijającego C może ujawnić wskazówki co do sposobu użyciainterfejsu programowania aplikacji C API Pythona oraz sposobu kształtowania ręcznie pisanegomodułu C/C++.Rysunek pingwina z fajką.Dyskusja online http://www.p2p.wrox.com [ Pobierz całość w formacie PDF ]