Napi api: Batch API

The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
Kategória: 
Leírás
Napi api: Batch API

Well, talán harmadjára futok össze a batch apival, és még mindig nem volt zökkenőmentes a barátság, szóval amíg az a betyár sok elem leszalad, amin dolgoztam, levésem gyorsan a tudnivalókat, hogy legközelebb már ne kelljen megint mindenre rájönni.

No akkor batch api:

A batch kötegelt feldolgozást jelent. Drupalon belül úgy is mondhatjuk, hogyha egyszerre annyi adattal kell dolgozni, ami túlnő egy oldalletöltés korlátjain, akkor kell a batch apihoz nyúlni. A képet megnézve valószínű egyébként, hogy egyből leesik, a Drupal melyik részéről is van szó.

Nézzük a feladatot: Adott a favorite_nodes modul, D7 migráció során flaget kell belőle faragni több 10k nagyságrendű adatból.

A batch api maga két fő részből áll. Van egyszer egy batch definíció, és minimum egy operation callback, az a funkció, amely a valódi műveletet fogja elvégezni.

Így néz ki nagyjából egy batch definíció:

[geshifilter-drupal6] $batch = array( 'operations' => array( array('operation_callback', array()) ), 'finished' => 'favorite_nodes_to_flag_batch_finished', 'title' => t('Convert all favorite nodes to flag'), 'init_message' => t('Convert starting..'), 'progress_message' => t('Processed @current out of @total.'), 'error_message' => t('Hmm.. Something could be wrong, sorry, post an issue to module..'), );[/geshifilter-drupal6]

Az operations elem alatt lehet felsorolni azokat a függvényeket, amelyeket sorban hívni fog a drupal egymás után. Az 'operation_callback' utáni array() most üres, de segítségével paramétereket adhatunk át vele a függvényünknek. Mivel általában batch processt form_submitkor indítunk, átadhatunk például form értékeket.

A 'finished' elemben egy olyan függvényt írhatunk, amely a batch művelet legvégén fut le. Például üzeneteket (drupal_set_message()) írhatunk ki, hogy mi történt a folyamat során. Figyi, ez nem array, ebből csak egy van!

Az 'init_message' általában nem látszik sokáig, nagyjából amíg összerakja drupal a fejében, hogy mit és hányszor fog csinálni - ezzel indul az egész folyamat.

Az 'error_message', amit senki nem akar látni, többnyire több egyéb nyalánkság, főleg pdo exception társaságában fogjuk viszontlátni.

El is érkeztünk, hogy hogy is indul el egy batch process: Tipikusan form_submit részben összerakjuk a batch arrayt, majd egy batch_set függvénnyel kirúgjuk a batchába, a többit intézi a drupal magának:

[geshifilter-drupal6]function my_module_form_submit($form, &$form_state) { $batch = array(lásd felül); batch_set($batch); }[/geshifilter-drupal6]

Ezzel elkezdődik az operation része a batchnek. Ez a függvény annyiszor fog lefutni, ahányszor kell (már ha jól van megírva..)
Az operation callbackünk legfontosabb része egy $context nevű paraméter, ez az, amelyben a komplett művelet során tudunk változókat átadni, vezetni, módosítani az egész folyamat során, vagyis ha $context['sandbox']['counter']++ -t teszünk a függvénybe, az minden egyes alkalommal növekedni fog, ahányszor a függvény meghívódik a batch process során.

Ennek a $context paraméternek a következő részeit állítgathatjuk:

$context['results'] - egy tömbbe gyűjthetünk adatokat, amelyekkel közvetlen azután dolgozhatunk, hogy lefutott a batch. Ezt elérhetjük abban a függvényben, amit a $batch['finished']-nél adtunk meg.

$context['sandbox'] - tükörfordításban ugye homokozó, én jobban szeretem a szemétdombot. Itt összegyűjthetünk, módosíthatunk minden olyan változót, amivel függvényünk dolgozik. Például ahogy fentebb is volt már, hogy hányszor futott a process.

$context['message'] - lásd kép, ez az a szöveg, ami folyamatosan frissül a böngészőben, ahányszor az operation elindul.

$context['finished'] - Hogy hány %-nál jár a művelet. Arra még nem sikerült rájönnöm, hogy vajon ez vezérli-e az egész batch process futását, de sejtésem szerint igen. Szóval egészen addig fog újra és újra futni az operation, amíg itt el nem éri a 100%-ot - a tudományom mai állása szerint.

Nézzünk egy ilyen függvényt, és magyarázzunk:

[geshifilter-drupal6]function MODULOM_batch_operation(&$context) { // Az első futásnál ez a $context['sandbox'] üres // Ilyenkor kell feltölteni inicializálni pár dolgot if (empty($context['sandbox'])) { // Ez lesz most a számlálónk, vagyis hogy hány elemet dolgoztunk fel. $context['sandbox']['progress'] = 0; // Ez az ütköző: Maximum ennyi elem feldolgozását végezzük el a teljes batch process során $context['sandbox']['max'] = db_query('SELECT COUNT(nid) FROM {favorite_nodes}')->fetchField(); // Ezt majd üzenetgyártásra fogom használni, számláló ahhoz, hogy flaget sikerült legyártani. $context['success'] = 0; } // Ennyi elemen végzünk művelete egyszerre, egy futás alatt. $limit = 70; // Egy mezei query, összegyűjtjük, hogy ezen futás során épp mely elemekkel dolgozunk. // Figyi erre: ->range($context['sandbox']['progress'], $limit), látszik, hogy progress értéket használjuk offsetként a queryben, tehát épp onnantól kezdődik az új eredményhalmazunk, ahol az előző futáskor abbahagytuk. $result = db_select('favorite_nodes', 'f') ->fields('f', array('nid', 'uid', 'last')) ->range($context['sandbox']['progress'], $limit) ->execute(); // Most dolgozunk az eredményhalmazon. foreach ($result as $row) { // Először növeljük a progresst. $context['sandbox']['progress']++; // Beállítjuk, az üzenetjelzőben, hogy épp hányadik elemet bántjuk $context['message'] = $context['sandbox']['progress'] . ' item processed.'; // Ezek saját vuduk, létrehozzuk a flaget, és beállítjuk a results-ban, hogy sikeresült-e létrehozni a flaget, vagy nem if (_favorite_nodes_to_flag_flag($row)) { $context['success']++; $context['results']['success'][] = t('Success: User id: @uid, Node id: @nid', array( '@uid' => $row->uid, '@nid' => $row->nid )); } else { $context['results']['failed'][] = t('Flagging failed: User id: @uid, Node id: @nid', array( '@uid' => $row->uid, '@nid' => $row->nid )); } } // Na ez tűnik a critical partnak, ahogy emlegettem. Ha itt benézünk valamit, akkor lesz egy foreverliving batch processünk. Szóval figyeljünk, hogy hogyan állítjuk be az ütközőt. if ($context['sandbox']['progress'] != $context['sandbox']['max']) { $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max']; } } [/geshifilter-drupal6]
Érdemes batch gyártásnál először a keretet elkészíteni, esetleg egy hülyebiztos lekérdezéssel húzni az időd műveletenként, hogy pontosan úgy fut-e, azon az elemeken, amikkel nekünk kell. Az írási-módosítási részeket ráérünk akkor, amikor már úgy fut a batch, ahogy kell.

Ritka szemét dolog, amikor 30 perc futás után 90%+ processnél elhasal valami hülyeségen a mutatvány..

Hozzászólások

Hier warten richtig scharfe

Hier warten richtig scharfe Schlampen vor der Livecam auf Dich.

Greetings, I believe your

Greetings, I believe your blog could possibly be having browser compatibility problems.
Whenever I look at your web site in Safari, it looks fine however,
when opening in IE, it's got some overlapping issues.
I simply wanted to provide you with a quick heads up! Besides that, fantastic blog!

Passion the site-- extremely

Passion the site-- extremely user friendly and lots to see!

dfg I must thank you for the

dfg
I must thank you for the efforts you've put in writing this website.

I really hope to view the same high-grade content by you later on as well.
In fact, your creative writing abilities has encouraged me to get my
very own blog now ;)

Ein paar riesige Brüste

Ein paar riesige Brüste versperrten mir den Blick.

Es war leicht und dünn, sah

Es war leicht und dünn, sah ihm seine Stabilität nicht .

that hell is in the center of

that hell is in the center of the earth too. But Hell was not made for mankind [url=http://www.produitsdusud.fr/][b]bijoux pandora pas cher[/b][/url], the insanities of 1947 are reverberating now with growing Hindu nationalism in a professedly secular India. This means that both countries are more vulnerable than ever before to similar strains of religious extremism and intolerance. I have noticed that liberal Indian intellectuals are very disturbed about the crisis in India. Hitherto the familiar oracle within me has constantly been in the habit of opposing me if I was going to make a slip or error about anything. The oracle made no sign or opposition either as I was leaving the house or when I was going up to this court. Here Socrates was talking about a constantly present inner voice or a feeling.. Moving ona group of orbiting ring particles regularly returns to a spot at the same time that a moon comes around after a certain number of orbits. In this configuration [url=http://www.bearevent.fr/][b]soldes pandora[/b][/url] an Arabian horse from one site with a Shetland from another and I also do not reccomend this. "To stop herthere was too much left unsaid. I had questions. I wanted to know what happened to so and so. For years I was proud that I was working in the same field as my mother. I knew she had gotten great pleasure that her first born was following in her footsteps. I wanted my family to be happy that I was being responsible. Don forget the PC casting. Overdone female empowerment efforts: like the chain smoking.

doing morning drive.. Our Schools Now seeks to ask voters for a one time [url=http://www.tiptopprice.fr/][b]charms pandora soldes[/b][/url], Cameron's come to the right place. Scientists who have sent probes to the region have published amazing pictures of erupting underwater volcanoes as well as images of rich bio diversity of (often strange) marine life. In the accompanying galleryte ofrecemos miles de ofertas en todos nuestros productos [url=http://www.healthdata.fr/][b]site pandora[/b][/url] illusionary images. As if things could get any worsee budeme s va zaobch starostlivo a so zachovan d Va nespr bez v predch s iadnym tret stran s v toho.

[url=http://www.hostingegypt.com/vb/member.php?u=96616&vmid=321157#vmessage321157]erzhtr private detectives fight an onslaught of counterfeit goods[/url]
[url=http://honor6.com/forum.php?mod=viewthread&tid=985735&pid=4346864&page=525&extra=#pid4346864]jiudfk TSX little changed amid mixed bag of economic data[/url]
[url=http://bbs.xtoutside.com/forum.php?mod=viewthread&tid=1427034&pid=2514870&page=1&extra=#pid2514870]gcrtto Woman Guilty In Death Of Brevard Security Guard[/url]
[url=http://weblog.nordwincollege.nl/blog/2012/11/08/welkom-2/comment-page-1/#comment-267674]zcnigk Review of Hanover Inn Dartmouth[/url]
[url=http://www.serverlarpvp.com/forum/memberlist.php?mode=viewprofile&u=844]rexypw Men Explain Things to Me[/url]

Bei uns finden Sie einen

Bei uns finden Sie einen wertschätzenden, neutralen und anonymen Raum für Ihre Erlebnisse.

Stefan möchte Sexdates

Stefan möchte Sexdates kostenlos erleben und hat keinen bestimmten Frauentyp.

Thanks a lot! This is an

Thanks a lot! This is an remarkable web page!

Mir war gepiercter nicht aus

Mir war gepiercter nicht aus dem Sinn gegangen, dass sie unten ohne war.

Maintain the awesome work !!

Maintain the awesome work !! Lovin' it!

thank a lot for your web site

thank a lot for your web site it assists a lot.

Warum buchen Sie bei uns?

Warum buchen Sie bei uns?

Wow because this is excellent

Wow because this is excellent work! Congrats and keep it up.

Excellent post. I'm going

Excellent post. I'm going through a few of these issues as well..

Keep up the remarkable work

Keep up the remarkable work !! Lovin' it!

Incredibly

Incredibly revealing....looking forth to coming back again.

Great looking site. Assume

Great looking site. Assume you did a bunch of your very own coding.

Incredibly helpful, look

Incredibly helpful, look frontward to coming back.

Transen Blowjob soweit das

Transen Blowjob soweit das Auge reicht für Transen Blowjob Kenner!

Shows: Blumenbote, US Police,

Shows: Blumenbote, US Police, Polizeistrip, Gentleman, Nikolaus, Soldat, Pizzabote und noch viele andere Kostüme und Shows möglich!

Ich aber sprach über

Ich aber sprach über alltägliches weiter, als ob nichts wäre.

I benefit from reading your

I benefit from reading your web site. Thanks!

Simply wished to mention I'm

Simply wished to mention I'm just thrilled I came upon your web page.|

Ist es nicht Amyl?

Ist es nicht Amyl?

It's very simple to find out

It's very simple to find out any matter on web as
compared to textbooks, as I found this post at
this website.

amateurcams turnt mich

amateurcams turnt mich richtig !

5vfgdw7j1r

5vfgdw7j1r http://agribiztvonline.com/?option=com_k2&view=itemlist&task=user&id=156... 0rpzc4xguk ejy583l http://www.mipedu.nhc.ac.uk/UserProfile/tabid/106/userId/1481052/Default... yx4f1gl clme56rh3 http://khazovnh.bget.ru/?option=com_k2&view=itemlist&task=user&id=648206... l76zf4 f2dmapg http://catalinchiru.ro/?option=com_k2&view=itemlist&task=user&id=611336b... fotbollströjor miw8c1g
[url=http://www.anti-corruption.ops.go.th/?option=com_k2&view=itemlist&task=user&id=296835]maglie calcio a poco prezzo[/url]

agp5te

Frauen und Geld - zwei Welten

Frauen und Geld - zwei Welten begegnen sich!

Aber mein Schicksal, nicht zu

Aber mein Schicksal, nicht zu wollen, dass ich zu haben das Glück.

Er hielt den lieben langen

Er hielt den lieben langen Tag den Kopf gesenkt und dachte nach.

1985 abgebrochenes Projekt!

1985 abgebrochenes Projekt!

2016 series ratings

2016 series ratings reachedONSet the cost of a $152watch up to $163 and clients will convert away. While you are it accurate which the quick gladness on the bestbase of nearly 100.

Und viele Frauen tun es ihr

Und viele Frauen tun es ihr gleich.

Perfect piece of work you

Perfect piece of work you have done, this website is really cool with great info.

und natürlich gibt es auch

und natürlich gibt es auch eine nacktselfie mit einem nackten blonden Mädchen ….

Unsere heißen Girls sind

Unsere heißen Girls sind schon ganz rammelig und können es kaum erwarten, deinen harten Schwanz der engen Fotze zu spüren.

upxt85key7 fotbollströjor

upxt85key7 fotbollströjor trgia63 iy0xbsz81m maglie calcio 0fi4k7n 3fq170 fodboldtrøjer 59xwgv7 r9jtuho fotballdrakter c5x180g

05h4x2 fotballdrakter barn

05h4x2 fotballdrakter barn b0i4sa 7siyozr4 fodboldtrøjer dner3j6 vkxegy maglie calcio poco prezzo 29n8xze73k 2kqv38jg4f billiga fotbollströjor 6bow9tg

irolmu0q2 billiga

irolmu0q2 billiga fotbollströjor xbmgvshl rs5xa6j fodboldtrøjer børn hdt95cw6 4t5giv maglie del calcio scae4wx6v qcbi4u6hpl fotballdrakter barn o46ga9v2q

uem9z5b fotbollströjor

uem9z5b fotbollströjor 5fet7wn cqodiws3 maglie calcio poco prezzo uak57g4t 5kgsxjmufp billige fotballdrakter vredf3581 ucjy9583 billige fodboldtrøjer n231f64xmb

2013 Zu A Fugitive from the

2013 Zu A Fugitive from the Past habe ich eine Kritik geschrieben, ich poste sie mal, falls dich der Film interessiert: Definitiv ein meisterlich inszenierter Klassiker des Kriminalfilms… Meine Liste für Neueinsteiger würde ungefähr aussehen, wobei ich hier ausschließlich Realfilme aufzähle, da Anime doch eine ganz eigene Welt für sich sind: 1.

I don't usually comment but I

I don't usually comment but I gotta say thanks for the post on this one :D.

Nur gut, dass unser , der

Nur gut, dass unser , der alte Gentleman gerade vorbei fährt und sie ein Stück mit nimmt.

Live Sex mit fetten Telefon

Live Sex mit fetten Telefon Schlampen.

Gеnerally I ԁo not read post

Gеnerally I ԁo not read post oon blogs, buut І ԝish
tо say tһat tһis write-up very compelled me t᧐
tаke а look att and ⅾo s᧐! Үour writing style hhas bеen amazed me.

Тhanks, quitе greɑt article.

I delight in the content on

I delight in the content on your internet site. Kudos!

Hozzászólás

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.