MySQL と Go 言語を使用して単純なタスク スケジューリング システムを開発する方法
タスク スケジューリング システムは一般的なアプリケーション シナリオであり、さまざまなタスクの管理と実行に役立ちます。タスク、タスクの種類。この記事では、MySQL と Go 言語を使用して単純なタスク スケジューリング システムを開発する方法を紹介し、具体的なコード例を示します。
まず、タスク情報を保存するデータベース テーブルを作成する必要があります。 MySQL では、次のコマンドを使用して、tasks という名前のテーブルを作成できます:
CREATE TABLE tasks ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, schedule_time DATETIME NOT NULL, status ENUM('pending', 'running', 'finished', 'failed') NOT NULL DEFAULT 'pending' );
このテーブルには、次のフィールドが含まれます:
Go 言語では、database/sql
パッケージを使用してデータベースに接続し、操作できます。 。まず、関連するパッケージをインポートする必要があります:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" )
次に、次のコードを使用して MySQL データベースに接続できます:
db, err := sql.Open("mysql", "用户名:密码@tcp(localhost:3306)/数据库名") if err != nil { log.Fatal(err) } defer db.Close()
Connect 次に、Go 言語の time
パッケージと goroutine
を使用して、スケジュールされたタスクを作成します。まず、特定のタスク ロジックを実行する関数を作成する必要があります。たとえば、次のコードは、タスク名と現在時刻を出力する単純なタスク ロジックを定義します。
func taskFunc(name string) { fmt.Printf("任务 %s 执行时间:%s ", name, time.Now().Format("2006-01-02 15:04:05")) }
次に、次のコードを使用して、指定された時刻に実行されるスケジュールされたタスクを作成できます。 # #
func scheduleTask(db *sql.DB, name string, scheduleTime time.Time) { // 将任务插入数据库 _, err := db.Exec("INSERT INTO tasks (name, schedule_time) VALUES (?, ?)", name, scheduleTime) if err != nil { log.Fatal(err) } // 进行定时调度 duration := time.Until(scheduleTime) time.AfterFunc(duration, func() { // 更新任务状态为running _, err := db.Exec("UPDATE tasks SET status = 'running' WHERE name = ? AND schedule_time = ?", name, scheduleTime) if err != nil { log.Fatal(err) } // 执行任务 taskFunc(name) // 更新任务状态为finished _, err = db.Exec("UPDATE tasks SET status = 'finished' WHERE name = ? AND schedule_time = ?", name, scheduleTime) if err != nil { log.Fatal(err) } }) }
time.AfterFunc 関数を使用してタイマーを設定し、指定された時間の後にタスクを実行するロジックです。タスクの実行前後に、タスクのステータスも更新します。
scheduleTask 関数を使用してスケジュールします。
func main() { // 连接数据库 db, err := sql.Open("mysql", "用户名:密码@tcp(localhost:3306)/数据库名") if err != nil { log.Fatal(err) } defer db.Close() // 调度任务 scheduleTask(db, "Task 1", time.Now().Add(10*time.Second)) scheduleTask(db, "Task 2", time.Now().Add(20*time.Second)) // 等待任务完成 time.Sleep(30 * time.Second) }
time.Now().Add## を使用します。 # タスクの予定実行時間を計算する関数。タスクをスケジュールした後、プログラムを 30 秒間スリープさせて、タスクの実行が完了するまで待ちます。 概要:
以上がMySQL と Go 言語を使用してシンプルなタスク スケジューリング システムを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。