Daha çox

Python kodunu icra etmək çox vaxt aparır (2 saatdan çox)? (Arcgis10.1)

Python kodunu icra etmək çox vaxt aparır (2 saatdan çox)? (Arcgis10.1)


Qonşu bağlamanın (şimal, cənub, şərq, qərb) mövqeyini təyin etməyə çalışdığım bu Python kodunu icra edirəm.

Yaxşı işləyir, ancaq 50 bağlama üçün 2 saat çəkdi!

Düşünürəm ki, səhv bir şey var. Bu icra müddəti normaldırmı? Daha sürətli etmək üçün təklifləriniz varmı?

Arcgis10.1, arcpy, Python2.7 idxal arcpy idxal riyaziyyat idxal arcview istifadə edirəm

arcpy.env.workspace = "D: /Users/saadiya/Documents/ArcGIS/Default1.gdb" arcpy.env.overwriteOutput = True workpace = "C:/Saadia/SAFTOP/Parcelle et rivrains/simulation arcgis" i üçün (1,50): expression = '"src_OBJECTID" =' + str (i) output_table = "table" + str (i) arcpy.PolygonNeighbors_analysis ("P_dataset", "Voisins") arcpy.TableSelect_analysis ("Voisins", output_table) , ifadə) arcpy.MakeFeatureLayer_management ("P_dataset", "Parcelles_class1_copy") arcpy.AddJoin_management ("Parcelles_class1_copy", "OBJECTID", output_table, "nbr_OBJectID" ""_2) _" "P_dataset.OBJECTID" = ' + str (i) #yazılı yazının 1 arcpy.Select_analysis ("Parcelles_class1_copy", target_parcel, whereclause1) Neighbors = "Neighbors_2" + str (i) whereclause2 = output_table_2O') #yazdır whereclause2 arcpy.Select_analysis ("Parcelles_class1_copy", Neighbors, whereherlalause2) arcpy.RemoveJoin_management ("Parcelles_class1_copy", output_table) target_ne ighbor_parcels = "target_neighbor_parcels_2" + str (i) arcpy.Union_analysis ([target_parcel, Neighbours], target_neighbor_parcels, "ALL") centroide = "centroide_2" + str (i) arcpy.FeatureToPneProcentro.Android_managed (target) cur = arcpy.UpdateCursor (centroide) arcpy.AddField_management (centroide, "Gisement", "DOUBLE") arcpy.AddField_management (centroide, "Orientation", "TEXT") arcpy.Delete_management (output_table) arcpy.Delete_manage (arduino) Delete_management (Qonşular) arcpy.Delete_management (target_neighbor_parcels) cur = arcpy.UpdateCursor (centroide) cur: a = output_table_2+"_ src_FID_1" #print a condition = row.getValue (a) if (condition == 0): Point row.getValue ("POINT_X") PointY = row.getValue ("POINT_Y") end_x = PointX end_y = PointY elif (şərt! = 0): PointX = row.getValue ("POINT_X") PointY = row.getValue ("POINT_Y ") #print end_x #print end_y #print PointX #print PointY dx = (end_x - PointX) dy = (end_y - PointY) #print dx #print dy azimuth = math.atan2 (dx, dy) #print azimuth azimuth_gr = azimuth*200/3.14519 print azimuth_gr if (dy> = 0 and dx> = 0): print 1 azimuth_c Correct = azimuth_gr elif (dy> = 0 və dx <= 0): çap 2 azimut_düz = 200- azimut_qr elif (dy <= 0 və dx <= 0): çap 3 azimut_düz = 200 + azimut_gr elif (dy <= 0 və dx> = 0 ): çap 4 azimuth_c Corre = 400 - azimuth_gr çap azimuth_correct row.setValue ("Gisement", azimuth_correct) cur.updateRow (sıra) Mövqe = row.getValue ("Gisement") #çap Vəzifə əgər (Mövqe> 45 və Mövqe <= 135) ): Orient = "Est" elif (Vəzifə> 135 və Mövqe <= 225): Orient = "Sud" elif (Mövqe> 225 və Mövqe <= 315): Orient = "Sahib" elif (Mövqe> 315 və Vəzifə <= 400): Orient = "Nord" elif (Mövqe> 0 və Mövqe <= 45): Orient = "Nord" elif (Mövqe == 0): Orient = "" print Orient row.setValue ("Orientation", Orient) cur .updateRow (satır)

Eyni təcrübəni yaşadım, amma başa düşdüm ki, skripti ArcGIS skript alətinə çevirdiyim zaman icra müddəti 12 dəqiqəyə qədər azaldı. Bir skript vasitəsi bir alət qutusuna bənzəyir. Skriptinizi vasitəyə bağlayırsınız. Parametrləri təyin etmək üçün skriptinizə bir neçə sətir əlavə etməlisiniz. Bu, GetParameterAsText ArcPy funksiyası vasitəsilə edilir. Bu http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//001500000006000000.htm, skript alətlərinin necə qurulacağına dair qısa bir tur təqdim edir.


Giriş məlumat dəstlərinizin məkan indekslərinə sahib olub olmadığını @Vincein təklif etdiyi kimi təsdiq edərdim. Girişləriniz Şəkil Fayllarıdırsa, bunların standart olaraq məkan indeksləri yoxdur və qurulmasına ehtiyac var.

Kodunuzu sürətləndirəcək başqa bir təklif, istifadə etdiyiniz kursoru kursorla əvəz etməkdirdaburada təsvir edildiyi kimi modul.


Təhlilinizin nəticəsini tam başa düşmürəm, amma qiymətləndirilən hər bir xüsusiyyət üçün çox əyləncəli bir şey etdiyiniz kimi görünür - məlumat dəstlərini kopyalamaq, onlara qoşulmaq, sahələr əlavə etmək, silmək. Bunları hər dəfə etmək lazım deyilsə, onları döngənizin xaricində bir dəfə edin.

Bəzi müqayisə vasitələri darboğazın harada olduğunu anlamağa kömək edə bilər. Faylınızın üstünə bu sətirləri əlavə edərək belə bir şey edə bilərsiniz:

idxal vaxtı start_time = time.time ()

və sonra keçən vaxtı görmək istədiyiniz yerdə əlavə edin:

çap vaxtı.time () - start_time

Müəyyən bir müddətdən sonra əmr satırından bir prosesi dayandırın/öldürün

Ətraf səsləri dinləyən və algılayan bir Python kodum var. Bu mənim layihəm deyil, İnternetdə tapdım (SoPaRe). ./Sopare.py -l əmri ilə səsləri yazmağa başlayır, lakin sonsuz döngədə. Dayandırmaq istədikdə Ctrl+C düymələrini basmalıyam.

Məqsədim bu proqramı 10 saniyədən sonra avtomatik olaraq dayandırmaqdır, amma müəlliflə danışanda proqramın vaxt məhdudiyyətinin olmadığını söylədi.

Öldürmək PID vasitəsi ilə öldürməyə çalışdım, amma proqram işləyəndə PID hər dəfə dəyişir. Zaman aralığından sonra bash vasitəsilə bunu necə dayandırmaq olar?

Alternativ olaraq, bu əmri python -dan os.system () əmri ilə icra edə bilərəm.


2 saatdan çox davam edən prosesləri tapmaq üçün bir layner

ps: anlık görüntü əmrini emal edin

-o: yalnız göstərilən sütunları daxil edin

etimes: prosesin başladığı vaxtdan saniyələr keçdi

əmr: bütün arqumentləri ilə bir simli olaraq əmr edin

awk: naxış tarama və işləmə dili

2 dollar: hər sətirdən ikinci nişan (standart ayırıcı boşluqdur)

7200: 7200 saniyə = 2 saat

Bir neçə il əvvəl yazdığım bir şey. Bu, progname dəyişənində sadalanan tətbiq adını axtarır və killtime dəyişənindəki dəyərdən (saniyələrlə) böyükdürsə onu öldürəcək. Ps -o comm ilə qaytarılan proses adına uyğun olaraq progname dəyişdirməlisiniz. İstədiyiniz saniyə sayına uyğun olaraq killtime dəyərini də dəyişməlisiniz. Tez -tez yoxlamaq üçün cronjobdan atəş aça bilər.

Bütün bunları işə salmadan əvvəl nə etdiyini bildiyinizə əmin olun, yoxsa gözlənilməz prosesləri öldürə bilər.

Bu RHEL 7.x -də işləyir, Solaris haqqında o qədər də müsbət deyil, amma çox yaxındır, buna görə də çox az düzəlişlə işləyə bilər. Formatlama səhvləri varsa üzr istəyirəm. Formatlaşdırma qalıqları varsa, təmizləməli oldum.


Python Python pəncərəsinə yüklənir

Python pəncərəsi, geoprosessing alətlərinin və ya digər Python əmrlərinin sürətli icrası üçün faydalı olan interaktiv Python tərcüməçisidir. Bununla birlikdə, müstəqil bir skriptə və ya Python faylına yazılmış və saxlanılan kod da Python pəncərəsinə yüklənə, dəyişdirilə və icra oluna bilər. Aşağıda bir xüsusiyyət sinifinə və sahəsinə baxan və sahə dəyərlərinin unikal bir siyahısını hazırlayan sadə bir skript var. Nümunə kifayət qədər sadədir, lakin Python pəncərəsinə bütün 13 xətti əl ilə daxil etmək xeyli vaxt aparacaq. Bunun əvəzinə, Python pəncərəsində sağ tıklayarak və Yüklə seçərək, bu kod (müstəqil bir skriptdə və ya Python faylında) dərhal Python pəncərəsinə yüklənir. Python pəncərəsinə yükləndikdən sonra xüsusiyyət sinifinin yerləşdiyi yerə, sahənin adına və ya sintaksisinə düzəlişlər edilə bilər və kodun son sətrində kursorla ENTER düyməsinə basaraq kod icra oluna bilər.

Xüsusiyyət sinifinə və sahə adına əsaslanan unikal sahə dəyərləri siyahısı yaradır


12 Cavablar 12

Kernelized SVM -lər, $ mathcal -ın dominant dəyəri olan verilənlər bazasının hər bir nöqtəsi arasındakı məsafə funksiyasının hesablanmasını tələb edir.(n_ mətn dəfə n_ mətn^2) $. Məsafələrin saxlanması yaddaşa yükdür, buna görə də dərhal hesablanır. Şükürlər olsun ki, çox vaxt qərar sərhədinə ən yaxın nöqtələrə ehtiyac var. Tez -tez hesablanan məsafələr bir önbellekte saxlanılır. Önbellek yıxılırsa, işləmə müddəti $ mathcal qədər artır(n_ mətn dəfə n_ mətn^3)$.

SVR olaraq çağıraraq bu önbelleği artıra bilərsiniz

Ümumiyyətlə, bu işə yaramayacaq. Ancaq hər şey itmir. Veriləri nümunə götürə və qalanlarını doğrulama dəsti olaraq istifadə edə bilərsiniz və ya fərqli bir model seçə bilərsiniz. 200.000 müşahidə aralığının üstündə, xətti öyrənənləri seçmək ağıllıdır.

Kernel SVM, kernel matrisini yaxınlaşdıraraq və xətti bir SVM -ə verərək, yaxınlaşdırıla bilər. Bu, xətti vaxtda dəqiqlik və performans arasında ticarət etməyə imkan verir.

Buna nail olmaq üçün populyar bir vasitə, kmeans/kmeans ++ tərəfindən tapılan 100 -ə yaxın çoxluq mərkəzlərindən istifadə etməkdir. Yeni əldə edilən xüsusiyyətlər daha sonra xətti bir modelə verilir. Bu praktikada çox yaxşı işləyir. Sophia-ml və vowpal wabbit kimi vasitələr Google, Yahoo və Microsoft-un bunu necə etməsidir. Giriş/çıxış sadə xətti öyrənənlər üçün üstünlük təşkil edir.

Məlumat bolluğunda, qeyri -parametrik modellər əksər problemlərdə təxminən eyni şəkildə işləyir. Mətn, şəkillər, zaman seriyası, audio kimi strukturlaşdırılmış girişlər istisnalardır.


Təklif olunan həll

Hər altıbucaqlı ədədin də üçbucaqlı bir rəqəm olduğunu nəzərə alsanız, üçbucaqlı ədədləri tamamilə göz ardı edə bilərsiniz:

Son həllim maşınımda işləməsi üçün təxminən 50 millisaniyə çəkir.

24 dövrə və 6 dövrə başa çatdırmaq və 64 bit int əhəmiyyətli dərəcədə daha yavaşdır, FDIV isə 14-16 dövr gecikmə, 4-5 dövr tamamlamaq üçün) və CPythonda int ilə əlaqəli işlər daha bahalıdır, çünki buna ehtiyac var. float yalnız xam C ikiyə bölündüyü sonsuz həssas int s hesab edir. $ son qrup $ & ndash ShadowRanger 5 Sentyabr '19, 16:05

13 ms,#1+#2+#3 8.5 ms -ə endirməklə), işləmə müddətində təxminən 2/3 dəfə azalma, eyni dərəcədə oxunan kod üçün (heç olmasa mənim üçün) oxunması çətin olan kod yalnız sıxmaq üçün istifadə olunur bir neçə nanosaniyə. $ endgroup $ & ndash ShadowRanger 5 sentyabr '19, 18:53

Qlobal dəyişənlər oxunuşa kömək etmir.

Üçbucaq və üçbucaq_sayı arasındakı fərq nədir? Bu adlar, təmsil etdiklərini başa düşməyimə kömək etmir.

Bir formanın termini yoxdur: var tərəflər. Konkret olaraq, müntəzəm formalar haqqında danışdığımız üçün iki xüsusiyyətə malikdir: tərəflərin sayı və hər tərəfin uzunluğu. Bu sinif mənim üçün heç bir məna kəsb etmir.

Həqiqətən kodların siniflərlə qurulması ilə məşğul olmaq istəyirsinizsə, sinif çox güman ki, Çözücü olmalıdır.

X -i ys -də sınayırsınızsa, ys -in siyahı deyil, bir sıra olması daha yaxşı olardı və ya xətti bir axtarış etməlisiniz.


1 Cavab 1

Həqiqətən, sualınızı cavablandırmaq üçün kodunuzu profilinizə daxil etməlisiniz. Bu müddət ərzində nələr çəkdiyini başa düşməlisiniz. Yalnız kodunuza baxaraq, bunu söyləmək mümkün deyil, amma təxminim budur ki, ən çox vaxt aşağıdakı yerlərdən birində keçir:

XML ayrıştırıcısı vasitəsilə daxil olduğunuz hər *.csv faylını işlətmək. CSV faylları kimi görünən XML sənədlərini ləğv etmək üçün bunu lazım bildiyinizi hiss edirəm. İdeal olaraq, bunu bir dəfə etməlisiniz, sonra sənədlərinizi bundan sonra düzgün bir şəkildə etiketləməlisiniz ki, hər dəfə bu yoxlamanı etməyəsiniz. Bu, məni potensial olaraq çox bahalı bir iş kimi vurur, bu yoxlamanı aşağıda dəyişdirdim, buna görə də yalnız sonradan faylla maraqlana biləcəyiniz zaman baş verir (yəni yolunda 'nəticələr' var)

Yoxlamaq istədiyiniz hər bir fayl üçün fərdi olaraq xarici prosesi başladın. Proseslərə başlamaq ucuz bir iş deyil. İdeal olaraq, hər bir qayda üçün tək bir proses başlatmaq və bir anda yoxlamaq üçün bütün əlaqəli fayl yollarını keçmək istərdiniz, ya da qaydalarınızı Python -da yazmısınızsa, hər bir faylı tam olaraq bir dəfə oxuya bilərsiniz bütün qaydalarınızla bir anda. Hər bir qayda, hər bir fayl üçün yeni bir prosesin başlanması, ehtimal ki, böyük bir yavaşlıq mənbəyidir.

Kodun bir neçə hissəsi də var ki, onlar sadəcə pis və pis tətbiqdir. Ayrıca, Python 3.5+ istifadə edirsinizsə, xüsusi tapma funksiyanız yerinə glob istifadə edə bilərsiniz. Onsuz da bütün kodunuzu nəzərdən keçirmək və uyğun görünən hər hansı bir təklif vermək ruhunda, kodunuzu necə sürətləndirəcəyiniz barədə heç bir yaxşı təklif olmasa da, kodunuzun necə yazılmasını təklif edərdim (çünki yenə də profilinizi göstərməlisiniz. vaxtın nədən ibarət olduğunu başa düşmək üçün kod):


Güman edirəm ki, GPIO pinindən idarə olunan "əlavə" LED deyil, "göyərtədə" və ya "quraşdırılmış" LED-lərdən bəhs edirsiniz. Əgər belədirsə, kodunuza aşağıdakıları daxil etməyə cəhd edə bilərsiniz:

PWR (güc) LED üçün bu şəkildə söndürə bilərsiniz:

Ssenarinizin iki hissəsini eyni anda icra etmək istədiyiniz görünür. Bir hissəsi LEDlərin yanıb sönməsini idarə edir, digər hissəsi isə kodun qalan hissəsini icra edir. Bu, Pythonda çox işləmə və ya çox işləmə ilə edilə bilər. Python 3 iş parçacığına baxın-Mövzu əsaslı paralellik və Python 3 çox işləmə-Proses əsaslı paralellik.

İstədiyinizi çoxlu iş parçacığı və ya çoxlu ayrı proseslər etmədən etmək mümkündür. Əlbəttə ki, bütün bu üsulların üstünlükləri var.

Yaxşı, bunu necə edirsən? Göz qırpımını yeniləmək üçün kodunuzu qurmalısınız. Bir az irəliləyiş çubuğunu tətbiq etmək və ya qeyd etmək kimi işləyir. Beləliklə, bu kodu aldığınızı düşünün.

İndi bunun darıxdırıcı ola biləcəyi doğrudur, amma bu o qədər də çətin deyil. Aydındır ki, update_progress () bir divar saatından bir taymeri yoxlaya bilər, daha tez -tez çağırıldıqda yalnız x saniyəni yanıb sönə bilər və ya hər dəfə daxil olanda keçməsinə icazə verə bilər.

Bu sxemin faydası budur ki, əsas proqramınız sönərsə, yanıp sönmə də dayanır.


3 Cavablar 3

WebIOPi sizin üçün ən yaxşı həll ola bilər. https://code.google.com/p/webiopi/ Proqramı ehtiyaclarınıza uyğun olaraq dəyişdirə bilərsiniz, ancaq bu, bir web interfeysi vasitəsi ilə bütün GPIO sancaqlarını idarə edəcək. Bunu sınayın və sizin üçün uyğun olub olmadığını görün.

Məhz bu səbəbdən inşa edilmiş bu layihəyə baxın: https://github.com/newbrute/pi-ui

İstifadəçi interfeysi əvvəlcədən konfiqurasiya edilməmişdir və oradakı digər variantlardan daha çox rahatlıq təklif edir

Düzəliş: Aydın olmaq üçün bu alternativ bir həlldir və WiringPi üçün düzəliş deyil.

NodeJS -in child_process.exec funksiyası bu seçimlə birlikdə bir python skriptini işə salmağa imkan verəcək

Veb saytınız üçün bir php skript yazın. Bu, pi -yə daxil olduqda görəcəyiniz səhifədir.

Düymə dəyərlərini POST metodu ilə skriptə göndərin.

Mesajı çıxarın və GPIO -da faktiki dəyişikliyi edəcək bir python skriptini çağırın.

Birinci sətir/home/pi/path/to/-da yerləşən python skriptini çağırır və icra edir. > /Dev /null, bütün çıxışı olmayan bir fayla qoyacağını söyləyəcək və & amp onu arxa planda işlədəcək. Son 2 həqiqətən lazım deyil, ancaq onsuz da python skriptini icra etmək lazım olduğu müddətdə veb saytınız yüklənəcəkdir.

Bu anda php, sudo əmri səbəbiylə pythona başlaya bilmədi. GPIO Pins ilə işləmək üçün imtiyazlara ehtiyacımız olduğu üçün bu çox vacibdir. Buna görə etməliyik: sudo nano /etc /sudoers və sonunda www-data ALL = (ALL) NOPASSWD: ALL

Giriş dəyişənlərini php -dən götürən və vəzifəni yerinə yetirən bir Python Script yazın.


9 Cavablar 9

Çox nüvəli CPU-ların çoxalması əsasən tələbdən yox, təklifdən qaynaqlanır.

Düz deyirsiniz ki, bir çox proqramçı öz sistemlərini parçalamaqda çətinlik çəkmirlər ki, birdən çox icra mövzularından mənfəət əldə edə bilsinlər. Buna görə müştəri, proqramın çox iş parçalı yerinə yetirilməsindən daha çox OS-nin çox proqramlaşdırılmasından bir fayda görür.

CPU istehsalçılarının getdikcə daha çox nüvə yaratmasının səbəbi, performansı artırmanın ənənəvi üsulunun - saat sürətinin artmasının fizikanın əsas məhdudiyyətlərinə (həm kvant effektləri, həm də istilik problemləri) girməsidir. Ötən ilki çiplərə nisbətən daha çox hesablama gücü təklif etməklə etibarlı şəkildə satıla bilən çiplər istehsal etməyə davam etmək üçün, OS-nin çox proqramlaşdırılması və çox iş parçacığından istifadənin artacağına inandıqları üçün daha çox müstəqil nüvələr qoydular. faktiki yalnız nominal qazancdan çox.

Ancaq səhv etməyin, həm çox nüvəli CPU-ların dizaynı, həm də istismarı eyni kodu daha sürətli işlətməkdən daha çətindir. Həm proqramçılar, həm də çip istehsalçıları çiplərinin sürətini artırmaq istəyərlər, paralelləşmə meylləri əsasən ehtiyac deyil, üstünlük məsələsidir.

Niyə çox işləmə hər yerdə deyil?

Mövzuların sayının gözləniləndən az olduğu təqdirdə çox iş parçalanmasının həyata keçirilməsinin çətin olduğunu və çatışmazlıqlarının olduğunu başa düşürəm.

Niyə çox işləmə hər yerdə deyil?

Çərçivə çağırışı: amma bu edir hər yerdə

Gəlin bir neçə platforma adlandıraq:

  • Masaüstü/noutbuklar: bu gün ən çox yayılmış tətbiqlərdən biri brauzerdir. Və yaxşı bir performans əldə etmək üçün müasir brauzerlər çox işləmə, GPU və s. Daxil olmaqla əldə edə biləcəkləri bütün üstünlüklərdən istifadə edirlər. Və bir çox müasir tətbiqlər də HTML -də quraşdırılmış bir brauzerlə qurulmuşdur (məsələn, Slack və Discord). Oyunlar, ən azından daha böyükləri də çox işləmə müddətini çoxdan qəbul etmişlər.
  • Serverlər: Bu gün və yaşda əksər serverlər HTTP istəkləri ilə məşğul olur, digər texnologiyalar olduqca nişdir. Və veb -serverlər sahib olduğunuz bütün nüvələrə qədər gözəl bir şəkildə genişlənir. Əlbəttə ki, hər bir müraciət çox güman ki, tək bir mövzuda işləyəcək, lakin birdən çox mövzu paralel olaraq birdən çox sorğunu emal edə biləcəyiniz deməkdir. Tamamilə standartdır. Digər ümumi hissə - verilənlər bazası proqramı - yaxşı ölçülür və hər hansı bir ciddi mühərrik birdən çox mövzu istifadə edir.
  • Cib telefonları/planşetlər: yenidən brauzerlər. Ancaq onsuz da təkrar -təkrar oyanan və kiçik bir şey edən çoxlu arxa plan vəzifələri var. Birdən çox nüvəyə sahib olmaq, bu fon vəzifələrinin ön plan tətbiqinizə daha az təsir etməsi və daha çox göründüyü anlamına gəlir. Cib telefonu CPU -ları onsuz da olduqca güclüdür, lakin aşağı enerji istehlakı, masaüstlərinə nisbətən hələ də daha yavaş olduqlarını ifadə edir və buna baxmayaraq bəlkə də daha geniş istifadə edirik. Oyunlar kimi ağır hesablama prosesləri də daxil olmaqla.

Uzun sözün qısası, tək nüvəli CPU-lara qayıtsaq, bunu dərhal görəcəksiniz. Müasir əməliyyat sistemlərində paralel işləyən bir çox proses var və vəzifələrin dəyişdirilməsi ciddi fayda verir. Bəzi proqramların fərdi olaraq birdən çox nüvədən çox az faydası olsa belə, bütövlükdə sistem demək olar ki, həmişə qazanc əldə edir. Bununla birlikdə, düşünürəm ki, müxtəlif sistemlər üçün neçə nüvəyə sahib olmağın bir mənası var. 64 nüvəli bir cib telefonu, ehtimal ki, 32 nüvəli cib telefonundan əhəmiyyətli dərəcədə sürətli olmayacaq.

Çox işlətmənin dediyiniz bir məqamı vurğulamaq istəyirəm həyata keçirmək çətindir. Bəzi problemlər təbii olaraq asanlıqla paralelləşdirilə bilən müstəqil hissələrə bölünür (& quot; utanc verici dərəcədə paralel & quot), buna görə çox işləmə və vektor təlimatları, paylanmış sistemlər və s. Kimi digər paralel texnikaları asanlıqla istifadə edə bilərik. loop üçün. Bəlkə hətta tərtibçi də avtomatik olaraq döngənizi vektorlaşdıracaq.

Bir çox problem o qədər də asan deyil və fərqli hissələr arasındakı qarşılıqlı əlaqədə çox diqqət tələb edir ki, düzgün qaydada işləsinlər və təsadüfən bir -birinin işini pozmasınlar. Bu, tez-tez icranı maneə törədən və çıxılmaz vəziyyətə səbəb ola bilən kilidlərlə həyata keçirilir, lakin daha ekzotik kilidsiz alqoritmlər mövcuddur. Hətta o zaman belə, paylaşılan resurs mübahisəsi, qaynaq aclığı kimi problemlərə yol aça bilər. Çox işləmə üçün çox tətbiq olunan geniş bir baxış üçün Vikipedia məqaləsinə baxın.

Çox işlənmiş kodu düzəltmək daha çətindir və düzəltmək daha çətindir. Proqramın yalnız 1/100 dəfə icra edildiyini göstərən yarış şərtləri ola bilər. Bir proqramçının, hər hansı bir sayda fərqli yaddaş girişi sifarişi ilə işləyən birdən çox mövzuya görə sırasıyla icra etdiyi bir proqram haqqında düzgün düşünməsi daha asandır. Pərdə arxasında, tək bir prosessor və ya tərtibçi, proqramçı üçün normal olaraq gizlədilən şəkildə təlimatları yenidən sıralaya bilər, lakin çox işləmə tətbiq edildikdə pozulur.

SEI CERT, paralellik tətbiq edərkən riayət edilməli olan qaydaların siyahısına malikdir. Bunların hamısı proqramçı tərəfindən nəzərə alınmalıdır düzgün kodvə sonra proqramçı performansını da nəzərə almalıdır. Əks təqdirdə ciddi təhlükəsizlik zəiflikləri ortaya çıxa bilər.


İnternetə bağlı olan başqa bir sistemdə işləyən bir skript vasitəsilə İnternetə bağlı moruq üzərində bir python skriptini necə icra etmək olar?

Webserver yanaşmasını oxudum və sınadım. Bu, "http: // (Pi -nin IP ünvanı)/proqram. Programme.py veb serverinin "www" qovluğunda olduğu yerdə.

Məntiqimə görə gpio sancaqlarını idarə etməklə məşğul olan bir proqramın İnternet üzərindən olan Pi -də uzaqdan icra edilməsini və İnternetə bağlı olan başqa bir cihazda exec (məsələn, exec ( "Pi üzərindəki proqramın URL'si") və Pi üzərindəki proqram, Pi -nin İnternetə qoşulduğu yerdə icra olunur.

Laptopda bir python kodu var və bu noutbukda İnternet bağlantısı var. İndi bir Pi -yə sahib olun və Pi -nin Gpio sancaqlarını idarə etməklə məşğul olan bir python kodu var və mənim Pi də İnternetə bağlıdır. Bu kodu noutbukda əl ilə icra edəcəyəm, amma Pi üzərindəki kod İnternetin köməyi ilə dizüstü kompüterdə işləyən kodla avtomatik olaraq icra edilməlidir, çünki hər iki cihaz İnternetə qoşulmuşdur. Əsasən, bunun icrası üçün Pi üzərindəki koda zəng kimi bir şey olmalıdır. Burada hər iki kod da funksionallıq baxımından müstəqildir, yeganə şey Python proqramının uzaqdan İnternet üzərindən Pi üzərindəki skriptin icrasını başlatması və ya başlatmasıdır.

Səs verməyin, bunu etmək üçün çox araşdırdım və çox çalışdım. Pi üçün çox yeniyəm.


Videoya baxın: GIS Python: Count shape files and Select by Location 2 Real world ArcPy examples