Питхон вишепроцесна фор-петља

Pithon Viseprocesna For Petla



Вишепроцесирање је упоредиво са вишенитним. Међутим, разликује се по томе што можемо да извршимо само једну нит у једном тренутку због ГИЛ-а који се користи за нит. Вишепроцесирање је процес узастопног извођења операција на неколико ЦПУ језгара. Нити не могу да раде паралелно. Међутим, вишепроцесирање нам омогућава да успоставимо процесе и истовремено их покрећемо на различитим језграма ЦПУ-а. Петља, као што је фор-петља, је један од најчешће коришћених скриптних језика. Понављајте исти рад користећи различите податке док се не постигне критеријум, као што је унапред одређен број итерација. Петља остварује сваку итерацију једну по једну.

Пример 1:  Коришћење Фор-петље у Питхон вишепроцесном модулу

У овом примеру користимо фор-петљу и процес класе вишепроцесног модула Питхон. Почињемо са врло једноставним примером како бисте брзо разумели како функционише вишепроцесна фор-петља Питхон-а. Користећи интерфејс који је упоредив са модулом за обраду нити, мултипроцесирање пакује креирање процеса.







Коришћењем подпроцеса уместо нити, пакет за вишепроцесирање обезбеђује и локалну и удаљену конкурентност, чиме се избегава глобално закључавање тумача. Користите фор-петљу, која може бити стринг објекат или тупле, да бисте стално понављали низ низа. Ово делује мање као кључна реч која се види у другим програмским језицима, а више као метода итератора која се налази у другим програмским језицима. Покретањем нове вишепроцесне обраде, можете покренути фор-петљу која истовремено извршава процедуру.



Почнимо са имплементацијом кода за извршавање кода коришћењем алата „спидер“. Верујемо да је „спидер“ такође најбољи за покретање Питхон-а. Увозимо процес модула за више процеса који код покреће. Вишепроцесирање у Питхон концепту који се назива „класа процеса“ ствара нови Питхон процес, даје му метод за извршавање кода и даје родитељској апликацији начин да управља извршавањем. Класа Процесс садржи процедуре старт() и јоин(), од којих су обе кључне.



Затим дефинишемо кориснички дефинисану функцију под називом „фунц“. Пошто је то кориснички дефинисана функција, дајемо јој име по нашем избору. Унутар тела ове функције преносимо променљиву „субјецт“ као аргумент и вредност „математике“. Затим позивамо функцију „принт()“, преносећи наредбу „Име заједничког субјекта је“ као и њен аргумент „субјецт“ који садржи вредност. Затим, у следећем кораку, користимо „иф наме== _маин_“, који вас спречава да покренете код када се датотека увози као модул и дозвољава вам да то урадите само када се садржај извршава као скрипта.





Одељак услова са којим почињете може се у већини случајева сматрати местом за обезбеђивање садржаја који би требало да се изврши само када се датотека покрене као скрипта. Затим користимо аргумент субјект и у њега чувамо неке вредности које су „наука“, „енглески“ и „рачунар“. Процесу се затим у следећем кораку даје име „процес1[]”. Затим користимо „процесс(таргет=фунц)“ да позовемо функцију у процесу. Таргет се користи за позивање функције, а ми чувамо овај процес у променљивој „П“.

Затим користимо „процесс1“ да позовемо функцију „аппенд()“ која додаје ставку на крај листе коју имамо у функцији „фунц“. Пошто је процес ускладиштен у променљивој „П“, овој функцији преносимо „П“ као њен аргумент. Коначно, користимо функцију „старт()“ са „П“ да покренемо процес. Након тога, поново покрећемо метод док пружамо аргумент „субјецт“ и користимо „фор“ у предмету. Затим, користећи „процесс1“ и „адд()“ методу још једном, започињемо процес. Процес се затим покреће и излаз се враћа. Затим се каже да се процедура заврши помоћу технике „јоин()“. Процеси који не позивају процедуру „јоин()“ неће изаћи. Једна кључна тачка је да се параметар кључне речи „аргс“ мора користити ако желите да пружите било какве аргументе кроз процес.




Сада, можете видети у излазу да се исказ први приказује тако што се прослеђује вредност за предмет „математика“ коју преносимо у функцију „фунц“, јер је прво зовемо помоћу функције „процес“. Затим користимо команду „аппенд()“ да бисмо имали вредности које су већ биле на листи која се додаје на крају. Затим су представљени „наука“, „рачунар“ и „енглески“. Али, као што видите, вредности нису у исправном редоследу. То је зато што то раде чим се процедура заврши и пријављују своју поруку.

Пример 2: Конверзија секвенцијалне Фор-петље у вишепроцесну паралелну Фор-петљу

У овом примеру, задатак вишепроцесне петље се извршава секвенцијално пре него што се конвертује у паралелни задатак фор-петље. Можете да се крећете кроз секвенце као што су колекција или низ по редоследу у ком се појављују помоћу фор-петљи.

Сада, почнимо са имплементацијом кода. Прво увозимо „спавање“ из временског модула. Користећи процедуру „слееп()“ у временском модулу, можете суспендовати извршавање позивајуће нити колико год желите. Затим користимо „рандом“ из рандом модула, дефинишемо функцију са именом „фунц“ и проследимо кључну реч „аргу“. Затим креирамо случајну вредност користећи „вал“ и постављамо је на „рандом“. Затим блокирамо на кратко коришћењем методе „слееп()“ и проследимо „вал“ као параметар. Затим, да бисмо пренели поруку, покрећемо методу „принт()“, преносећи речи „реади“ и кључну реч „арг“ као параметар, као и „цреатед“ и проследимо вредност користећи „вал“.

Коначно, користимо „флусх“ и постављамо га на „Труе“. Корисник може да одлучи да ли да баферује излаз користећи опцију флусх у функцији штампања у Питхон-у. Подразумевана вредност овог параметра Фалсе означава да излаз неће бити баферован. Излаз се приказује као низ редова који следе један за другим ако га поставите на труе. Затим користимо „иф наме== маин“ да обезбедимо тачке уласка. Затим извршавамо посао узастопно. Овде смо поставили опсег на „10“ што значи да се петља завршава након 10 итерација. Затим позивамо функцију „принт()“, прослеђујемо јој наредбу за унос „реади“ и користимо опцију „флусх=Труе“.


Сада можете видети да када извршимо код, петља узрокује да се функција покрене „10“ пута. Понавља се 10 пута, почевши од индекса нула и завршавајући на индексу девет. Свака порука садржи број задатка који је број функције који прослеђујемо као „арг“ и број креирања.


Ова секвенцијална петља се сада трансформише у вишепроцесну паралелну фор-петљу. Користимо исти код, али идемо на неке додатне библиотеке и функције за вишепроцесирање. Стога морамо увести процес из вишепроцесирања, баш као што смо раније објаснили. Затим креирамо функцију под називом „фунц“ и проследимо кључну реч „арг“ пре него што употребимо „вал=рандом“ да добијемо случајни број.

Затим, након што позовемо метод „принт()“ да прикажемо поруку и дамо параметар „вал“ да одложи мали период, користимо функцију „иф наме= маин“ да обезбедимо улазне тачке. Након тога креирамо процес и позивамо функцију у процесу користећи „процес“ и прослеђујемо „таргет=фунц“. Затим прослеђујемо „фунц”, „арг”, преносимо вредност „м” и преносимо опсег „10” што значи да петља завршава функцију након „10” итерација. Затим покрећемо процес помоћу методе „старт()“ са „процесс“. Затим позивамо методу „јоин()“ да сачекамо извршење процеса и да завршимо сав процес након тога.


Стога, када извршимо код, функције позивају главни процес и започињу њихово извршавање. Међутим, они се раде све док се не заврше сви задаци. То можемо видети јер се сваки задатак обавља истовремено. Саопштава своју поруку чим се заврши. То значи да иако поруке нису у реду, петља се завршава након што се заврши свих „10“ итерација.

Закључак

У овом чланку смо покрили Питхон вишепроцесну фор-петљу. Такође смо представили две илустрације. Прва илустрација показује како да користите фор-петљу у Питхоновој библиотеци вишепроцесне петље. А друга илустрација показује како да промените секвенцијалну фор-петљу у паралелну вишепроцесну фор-петљу. Пре него што направимо скрипту за Питхон мултипроцесирање, морамо увести модул за вишепроцесирање.