本文整理汇总了PHP中Job::pop方法的典型用法代码示例。如果您正苦于以下问题:PHP Job::pop方法的具体用法?PHP Job::pop怎么用?PHP Job::pop使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Job
的用法示例。
在下文中一共展示了Job::pop方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: execute
public function execute() {
global $wgTitle;
if ( $this->hasOption( 'procs' ) ) {
$procs = intval( $this->getOption( 'procs' ) );
if ( $procs < 1 || $procs > 1000 ) {
$this->error( "Invalid argument to --procs", true );
}
$fc = new ForkController( $procs );
if ( $fc->start() != 'child' ) {
exit( 0 );
}
}
$maxJobs = $this->getOption( 'maxjobs', false );
$maxTime = $this->getOption( 'maxtime', false );
$startTime = time();
$type = $this->getOption( 'type', false );
$wgTitle = Title::newFromText( 'RunJobs.php' );
$dbw = wfGetDB( DB_MASTER );
$n = 0;
$conds = '';
if ( $type !== false ) {
$conds = "job_cmd = " . $dbw->addQuotes( $type );
}
while ( $dbw->selectField( 'job', 'job_id', $conds, 'runJobs.php' ) ) {
$offset = 0;
for ( ; ; ) {
$job = !$type ? Job::pop( $offset ) : Job::pop_type( $type );
if ( !$job ) {
break;
}
wfWaitForSlaves( 5 );
$t = microtime( true );
$offset = $job->id;
$status = $job->run();
$t = microtime( true ) - $t;
$timeMs = intval( $t * 1000 );
if ( !$status ) {
$this->runJobsLog( $job->toString() . " t=$timeMs error={$job->error}" );
} else {
$this->runJobsLog( $job->toString() . " t=$timeMs good" );
}
if ( $maxJobs && ++$n > $maxJobs ) {
break 2;
}
if ( $maxTime && time() - $startTime > $maxTime ) {
break 2;
}
}
}
}
示例2: execute
public function execute()
{
global $wgTitle;
if ($this->hasOption('procs')) {
$procs = intval($this->getOption('procs'));
if ($procs < 1 || $procs > 1000) {
$this->error("Invalid argument to --procs", true);
}
$fc = new ForkController($procs);
if ($fc->start() != 'child') {
exit(0);
}
}
$maxJobs = $this->getOption('maxjobs', false);
$maxTime = $this->getOption('maxtime', false);
$startTime = time();
$type = $this->getOption('type', false);
$wgTitle = Title::newFromText('RunJobs.php');
$dbw = wfGetDB(DB_MASTER);
$n = 0;
$conds = '';
if ($type !== false) {
$conds = "job_cmd = " . $dbw->addQuotes($type);
}
while ($dbw->selectField('job', 'job_id', $conds, 'runJobs.php')) {
$offset = 0;
for (;;) {
$job = !$type ? Job::pop($offset) : Job::pop_type($type);
if (!$job) {
break;
}
//check for similar (but not IDENTICAL (different timestamp allowed) jobs and delete them.
$dbw->delete('job', array('job_cmd' => $job->command, 'job_title' => $job->title->getDBkey()), __METHOD__);
wfWaitForSlaves();
$t = microtime(true);
$offset = $job->id;
$status = $job->run();
$t = microtime(true) - $t;
$timeMs = intval($t * 1000);
if (!$status) {
$this->runJobsLog($job->toString() . " t={$timeMs} error={$job->error}");
} else {
$this->runJobsLog($job->toString() . " t={$timeMs} good");
}
if ($maxJobs && ++$n > $maxJobs) {
break 2;
}
if ($maxTime && time() - $startTime > $maxTime) {
break 2;
}
}
}
}
示例3: execute
/**
* Main entry point, tak job from queue and run it
*
* @access public
*/
public function execute()
{
global $wgUser, $wgApiRunJobsPerRequest;
ini_set("memory_limit", -1);
ini_set("max_execution_time", 0);
$result = array();
$done = 0;
#
# check if wiki is not readonly
#
if (!wfReadOnly()) {
$params = $this->extractRequestParams();
if (!$wgUser->isAllowed("runjob")) {
$this->dieUsageMsg(array("cantrunjobs"));
}
#
# api param has precedence
#
if (isset($params["max"])) {
$max = $params["max"];
if (is_numeric($max) && $max > 0 && $max <= 100) {
$this->maxJobs = $max;
}
} elseif (!empty($wgApiRunJobsPerRequest) && is_numeric($wgApiRunJobsPerRequest) && $wgApiRunJobsPerRequest > 0 && $wgApiRunJobsPerRequest <= 100) {
$this->maxJobs = $wgApiRunJobsPerRequest;
}
foreach (range(1, $this->maxJobs) as $counter) {
if (isset($params["type"])) {
$job = Job::pop_type($params["type"]);
} else {
// refreshlinks2 has precedence
$job = Job::pop_type("refreshLinks2");
if (!$job) {
// any job
$job = Job::pop();
}
}
if ($job) {
$status = $job->run();
$result["job"][] = array("id" => $job->id, "type" => $job->command, "status" => $job->toString(), "error" => $job->error);
$done++;
} else {
// there's no job in queue, finish loop, release request
break;
}
}
}
$result["left"] = $this->checkQueue($done);
$this->getResult()->addValue(null, $this->getModuleName(), $result);
$result = array();
}
示例4: array
<?php
$optionsWithArgs = array('maxjobs');
$wgUseNormalUser = true;
require_once 'commandLine.inc';
require_once "{$IP}/includes/JobQueue.php";
require_once "{$IP}/includes/FakeTitle.php";
if (isset($options['maxjobs'])) {
$maxJobs = $options['maxjobs'];
} else {
$maxJobs = 10000;
}
// Trigger errors on inappropriate use of $wgTitle
$wgTitle = new FakeTitle();
$dbw =& wfGetDB(DB_MASTER);
$n = 0;
while ($dbw->selectField('job', 'count(*)', '', 'runJobs.php')) {
while (false != ($job = Job::pop())) {
wfWaitForSlaves(5);
print $job->id . " " . $job->toString() . "\n";
if (!$job->run()) {
print "Error: {$job->error}\n";
}
if ($maxJobs && ++$n > $maxJobs) {
break 2;
}
}
}
示例5: doJobs
/**
* Do a job from the job queue
*/
function doJobs()
{
global $wgJobRunRate;
if ($wgJobRunRate <= 0 || wfReadOnly()) {
return;
}
if ($wgJobRunRate < 1) {
$max = mt_getrandmax();
if (mt_rand(0, $max) > $max * $wgJobRunRate) {
return;
}
$n = 1;
} else {
$n = intval($wgJobRunRate);
}
while ($n-- && false != ($job = Job::pop())) {
$output = $job->toString() . "\n";
$t = -wfTime();
$success = $job->run();
$t += wfTime();
$t = round($t * 1000);
if (!$success) {
$output .= "Error: " . $job->getLastError() . ", Time: {$t} ms\n";
} else {
$output .= "Success, Time: {$t} ms\n";
}
wfDebugLog('jobqueue', $output);
}
}
示例6: list
for (;;) {
// determine the most lagged slave
// if $lag == -1, there's no slave.
list($host, $lag) = LBFactory::singleton()->getMainLB()->getMaxLag();
if ($lag == -1) {
// make sleeping time adaptive to database load.
$runningThreads = smwfGetNumOfRunningThreads($dbw);
$runningThreads = $runningThreads <= MAX_THREADS_CONSIDERED ? $runningThreads : MAX_THREADS_CONSIDERED;
// wait depending on user-defined $rate and server load
sleep(1 / $rate + $runningThreads);
} else {
// wait for most lagged slave to be *below* 1/$rate + 3 seconds lag time.
wfWaitForSlaves(1 / $rate + 3);
}
// get next job
$job = Job::pop();
// is there a break signal?
$accept_sock = @socket_accept($socket);
if ($accept_sock !== false) {
socket_getpeername($accept_sock, $name);
if ($name == '127.0.0.1') {
// only stop, if request comes from localhost.
// TODO: is this SAVE? spoofing?
print "\n\nStopped.";
socket_close($accept_sock);
break;
}
}
if ($job == false || $job == NULL) {
continue;
}
示例7: doJobs
/**
* Do a job from the job queue
*/
function doJobs()
{
global $wgJobLogFile, $wgJobRunRate;
if ($wgJobRunRate <= 0) {
return;
}
if ($wgJobRunRate < 1) {
$max = mt_getrandmax();
if (mt_rand(0, $max) > $max * $wgJobRunRate) {
return;
}
$n = 1;
} else {
$n = intval($wgJobRunRate);
}
require_once 'JobQueue.php';
while ($n-- && false != ($job = Job::pop())) {
$output = $job->toString() . "\n";
if (!$job->run()) {
$output .= "Error: " . $job->getLastError() . "\n";
}
if ($wgJobLogFile) {
error_log($output, 3, $wgJobLogFile);
}
}
}
示例8: doAsyncUpload
/**
* Helper function to perform an async upload, execute the job and fetch
* the status
*
* @return array The result of action=upload&statuskey=key
*/
private function doAsyncUpload($token, $ignoreWarnings = false, $leaveMessage = false)
{
$params = array('action' => 'upload', 'filename' => 'UploadFromUrlTest.png', 'url' => 'http://bits.wikimedia.org/skins-1.5/common/images/poweredby_mediawiki_88x31.png', 'asyncdownload' => 1, 'token' => $token);
if ($ignoreWarnings) {
$params['ignorewarnings'] = 1;
}
if ($leaveMessage) {
$params['leavemessage'] = 1;
}
$data = $this->doApiRequest($params);
$this->assertEquals($data[0]['upload']['result'], 'Queued');
$this->assertTrue(isset($data[0]['upload']['statuskey']));
$statusKey = $data[0]['upload']['statuskey'];
$job = Job::pop();
$this->assertEquals('UploadFromUrlJob', get_class($job));
$status = $job->run();
$this->assertTrue($status);
$data = $this->doApiRequest(array('action' => 'upload', 'statuskey' => $statusKey, 'token' => $token));
return $data;
}
示例9: executeScript
//.........这里部分代码省略.........
$wgOut->addWikiMsg('maintenance-re-rce', $rec);
} else {
$rec = 0;
}
$total = $cur + $del + $rec;
$wgOut->addWikiMsg('maintenance-re-total', $total);
if (!$report) {
$rspec = array('rev_user' => $to->getId(), 'rev_user_text' => $to->getName());
$res = $dbw->update('revision', $rspec, $rcond, 'Maintenance::reassignEdits');
$aspec = array('ar_user' => $to->getId(), 'ar_user_text' => $to->getName());
$res = $dbw->update('archive', $aspec, $acond, 'Maintenance::reassignEdits');
if (!$wgRequest->getCheck('wpRc')) {
$cspec = array('rc_user' => $to->getId(), 'rc_user_text' => $to->getName());
$res = $dbw->update('recentchanges', $cspec, $ccond, 'Maintenance::reassignEdits');
}
}
$dbw->immediateCommit();
if ($report) {
$wgOut->addWikiMsg('maintenance-re-rr', wfMsg('maintenance-re-report'));
}
} else {
$ton = $to->getName();
$wgOut->addWikiMsg('maintenance-re-nf', $ton);
}
$wgOut->addWikiMsg('maintenance-success', $type);
break;
case 'runJobs':
$maxJobs = 10000;
$dbw = wfGetDB(DB_MASTER);
$n = 0;
while ($dbw->selectField('job', 'count(*)', '', 'runJobs.php')) {
$offset = 0;
for (;;) {
$job = Job::pop($offset);
if ($job == false) {
break;
}
waitForSlaves(5);
$wgOut->addWikiText("* " . $job->id . " " . $job->toString());
$offset = $job->id;
if (!$job->run()) {
$wgOut->addWikiText("** " . wfMsg('maintenance-error', array($job->error)));
}
if ($maxJobs && ++$n > $maxJobs) {
break 2;
}
}
}
$wgOut->addWikiMsg('maintenance-success', $type);
break;
case 'showJobs':
$dbw = wfGetDB(DB_MASTER);
$count = $dbw->selectField('job', 'count(*)', '', 'runJobs.php');
$wgOut->addHTML($count);
$wgOut->addWikiMsg('maintenance-success', $type);
break;
case 'stats':
global $wgMemc;
if (get_class($wgMemc) == 'FakeMemCachedClient') {
$wgOut->addWikiMsg('maintenance-memc-fake');
return;
}
$wgOut->addWikiText('<h2>' . wfMsg('maintenance-memc-requests') . '</h2>');
$session = intval($wgMemc->get(wfMemcKey('stats', 'request_with_session')));
$noSession = intval($wgMemc->get(wfMemcKey('stats', 'request_without_session')));
$total = $session + $noSession;
示例10: wfGetDB
$maxJobs = 10000;
}
$type = false;
if (isset($options['type'])) {
$type = $options['type'];
}
$wgTitle = Title::newFromText('RunJobs.php');
$dbw = wfGetDB(DB_MASTER);
$n = 0;
$conds = '';
if ($type !== false) {
$conds = "job_cmd = " . $dbw->addQuotes($type);
}
while ($dbw->selectField('job', 'job_id', $conds, 'runJobs.php')) {
$offset = 0;
for (;;) {
$job = $type == false ? Job::pop($offset) : Job::pop_type($type);
if ($job == false) {
break;
}
wfWaitForSlaves(5);
print wfTimestamp(TS_DB) . " " . $job->id . " " . $job->toString() . "\n";
$offset = $job->id;
if (!$job->run()) {
print wfTimestamp(TS_DB) . " Error: {$job->error}\n";
}
if ($maxJobs && ++$n > $maxJobs) {
break 2;
}
}
}