LoginSignup
4
2

More than 5 years have passed since last update.

PyQSでお気軽Task Queue構築

Posted at

PythonでQueue制御をする場合、Celeryなどが定番ですが、Amazon SQSを使ったPyQSというのを見つけたのでちょっと使ってみました。READMEとは微妙に挙動が異なるので苦労しましたが、非常にお気軽なTask Queue構築が可能なのはありがたいです。

設置

設置は簡単でpipコマンド一発です。
pip install pyqs

環境変数

以下の環境変数が必要です。

  • AWS_ACCESS_KEY_ID AWSS_SECRET_ACCESS_KEY...Amazon SQSへのRead/Write権限を備えていること
  • PYTHONPATH...Queueで実行するPythonスクリプトを参照できるようにしておきます

タスク

pyqsからデコレーターtaskをインポートして、Queueに登録したい関数に載せます。

qqq/tasks.py
from pyqs import task


@task('queue0')
def another_task(message):
    print "another_task: message={}".format(message)


@task('queue0')
def send_email(subject):
    print "send_email: subject={}".format(subject)

Queueへの登録

add_queue.py
from qqq.tasks import another_task, send_email
from settings import config

for i in range(0, 100):
    send_email.delay(subject='hogehoge')
    another_task.delay(message='hogehogehoge')

Workerの起動

run_queue.sh
#! /bin/bash

export PYTHONPATH=`pwd`
export QUEUE='queue0'
pyqs $QUEUE

GithubのREADMEによればQueue名は「queue0.tasks.send_email」とか「queue.tasks.another_task」になるはずですが、実際のSQSはQueue名にピリオドは許してくれないので、@taskデコレータで宣言したqueue0がQueue名になります。ここを理解するまでに2時間くらいソース追いかけましたよ。

まとめ

自力でメッセージブローカーを設定しなくても、Amazon SQSへのアクセス権があれば即Task Queueを作れるのは魅力的です。あとSQSはタダ同然なのもありがたいですね。

 Github

ソースは こちら

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2