Table of Contents

上一個主題

運行環境

下一個主題

服務列表

本頁

實現后臺進程和后臺任務?

后臺進程?

應用可以通過應用代碼根目錄下的 Procfile 文件指定運行的后臺進程。

Procfile 文件每一行聲明一條需要運行的后臺進程,格式如下:

name: command

name 為后臺進程名, command 為啟動后臺進程的命令。

下面是一個 Python 應用啟動一個后臺任務進程的配置信息:

worker: python vendor/rq/cli.py worker

或者當使用 PHP 時:

worker: php daemon.php

在代碼提交后,你可以在『應用/后臺進程』頁面看到所有后臺進程的運行狀態,進程剛創建時默認只會運行一個實例,你可以根據需要來增加實例數。

../../_images/background-process-management.png

使用PHP-Resque實現后臺任務?

php-resque 是一個基于 Redis 的隊列庫,是 resque 項目的 PHP Fork 版本。

安裝?

使用 php-resque 之前,需要先安裝,可以使用 composer 進行。如果當前系統中沒有 composer,可以參考 使用 Composer 管理依賴庫 安裝。

$ composer require sinacloud/php-resque:dev-master
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing colinmollenhour/credis (1.7)
    Loading from cache

  - Installing psr/log (1.0.0)
    Loading from cache

  - Installing chrisboulton/php-resque (dev-master 73b62e3)
    Cloning 73b62e364a89230d041abd2ba767bcec6fa15927

Writing lock file
Generating autoload files

將 vendor 目錄和應用代碼一起提交入代碼倉庫,即可在服務端的代碼里使用 php-resque 了。

添加任務描述類?

創建一個 job.php 文件,這個文件里定義需要運行的任務。

<?php

class My_Job
{
    public function perform()
    {
        // Work work work
        echo $this->args['name'];
    }
}

創建后臺工作進程?

創建一個 worker.php 文件,這個模塊會監聽 Redis 隊列并處理任務。

<?php

date_default_timezone_set('Asia/Shanghai');
$redis = "redis 連接地址";
require 'job.php';
putenv("QUEUE=default");
putenv("REDIS_BACKEND=$redis");
require 'vendor/bin/resque';

在應用代碼根目錄下創建一個 Procfile 文件,如下添加一個新的后臺進程。

worker: php worker.php

添加任務?

在 Web 應用程序的處理函數中,使用如下代碼添加任務。

<?php

require 'vendor/autoload.php';
$redis = "redis 連接地址";
Resque::setBackend($redis);
$args = array(
    'name' => 'Chris'
);
Resque::enqueue('default', 'My_Job', $args);

執行完 enqueue 后,任務就會被添加到 Redis 隊列中去異步執行,后臺進程會不停的從 Redis 隊列中取出任務并執行。

部署?

將上面的代碼提交入代碼倉庫并 push 到服務端,ta-dah! 完成。你可以在『應用/后臺進程』頁面來重啟或者調整進程數目。如果進程啟動有問題,你可以在 HTTP 錯誤日志里看到后臺進程的詳細錯誤日志來解決問題。

河南22选5开奖
  • <em id="xpjve"><ol id="xpjve"></ol></em>

          1. <em id="xpjve"><ol id="xpjve"></ol></em>