Commits

hideki nara committed 8704564

almost completed

Comments (0)

Files changed (39)

celery/_sources/async_usecase.txt

     :depth: 2
     :class: talks-contents
 
+
+.. raw:: html
+ 
+    <a  class="popup-image" id="popup-image" href="http://cdn.thenextweb.com/files/2010/08/stress_one.gif">
+        <img src="http://cdn.thenextweb.com/files/2010/08/stress_one.gif" width="300px"/>
+    </a>
+
+
 作業を貯めてあとでやる
 =======================
 

celery/_sources/canvas.txt

     >>>> h1.apply_async()
     <AsyncResult: b1cc1a33-4d82-4684-937b-0a836ce6bca0>
 
+複製
+-----
+
+
+.. code-block:: python
+
+    >>> t2=t.clone()
+    >>> t2
+    
+    app.tasks.add(2, 5)
+    >>> t
+    app.tasks.add(2, 5)
+    
+    >>> t2.args = (100,200)
+    >>> t
+    app.tasks.add(2, 5)
+    
+    >>> t2
+    app.tasks.add(100, 200)
+    
+    >>> r=t2.delay()
+    >>> r.result
+    300
+
+
 celey.canvas.Signature = dict + α
 ================================================
 
 partial
 ------------
 
-immutable
-------------
+タスクの引数は部分的に変更可能。
+
+.. code-block:: python
+
+    @task
+    def add(x,y):
+        return x+y
+    
+    
+.. code-block:: python
+    
+    >>> from app.tasks import \*
+    >>> t=add.s(2)
+
+    >>> type(t)
+    <class 'celery.canvas.Signature'>
+    
+    >>> str(t)
+    'app.tasks.add(2)'
+    
+    >>> r=t.delay()
+    >>> r.result
+    
+    TypeError('add() takes exactly 2 arguments (1 given)',)
+    
+    >>> r=t.delay(3)
+    >>> r.result
+    5
+    
+    
+    >>> t.args = t.args + (5,)
+    >>> r.result
+    7
 
 callbacks
 ------------
 
+- タスクの後に実行するタスクを指定可能 -> ワークフロー(Canvas)
+
+immutable
+------------
+
+
+-  普遍 = 親タスクの結果を見ない
+
+.. code-block:: python 
+
+    @task
+    def add(x,y):
+        return x+y
+    
+
+.. code-block:: python 
+
+    @task
+    def linkedon( \*args,**kwargs):
+        return str(args) + str(kwargs)
+    
+    
+.. code-block:: python 
+
+    >>> t=add.apply_async((9,3),link=linkedon.subtask((),{'msg':'fine'}))
+    >>> t.children[0].result
+    "(12,){'msg': 'fine'}"
+    
+    >>> t=add.apply_async((9,3),link=linkedon.subtask((),{'msg':'fine'},immutable=True))
+    >>> t.children[0].result
+    "(){'msg': 'fine'}"
+    
+ショートカット:s(),si()
+----------------------------
+
+.. code-block:: python 
+
+    >>> t=add.apply_async((9,3),link=linkedon.s((),{'msg':'fine'}))
+    >>> t.children[0].result
+    "(12, (), {'msg': 'fine'}){}"
+
+    
+    >>> t=add.apply_async((9,3),link=linkedon.si((),{'msg':'fine'}))
+    >>> t.children[0].result
+    "((), {'msg': 'fine'}){}"
+
+
+
 Groups(グループ内のTaskを平行して実行する)
 ========================================================
 
+まとめられる。
+
+.. code-block:: python
+
+    >>> from celery import group
+    >>> res=group(add.s(1,2),add.s(2,3),add.s(3,4))()
+
+    >>> res.result
+
+    Traceback (most recent call last):
+    File "<console>", line 1, in <module>
+    AttributeError: 'GroupResult' object has no attribute 'result'
+
+    >>> res.get()
+    [3, 5, 7]
+
+GroupResult
+
+.. code-block:: python
+
+    >>> type(res)
+    <class 'celery.result.GroupResult'>
+
+    >>> res.id
+    '7bbf1f1b-eafa-4924-a8a2-5d924ff1f131'
+
+    >>> res.children
+    (<AsyncResult: 56bca686-7eec-405a-a030-87cf4ede955f>, 
+    <AsyncResult: 41d543d4-400b-4727-a388-02813605d7c2>, 
+    <AsyncResult: 1c3f0564-ac7d-4848-9caf-f72e6244ae23>)
+
+
+タスク付け足し
+
+.. code-block:: python
+
+    >>> g.tasks = g.tasks + (add.s(4,5),)
+    >>> g.tasks
+    (app.tasks.add(1, 2), app.tasks.add(2, 3), app.tasks.add(3, 4), app.tasks.add(4, 5))
+
+    >>> res=g()
+    >>> res.get()
+    [3, 5, 7, 9]
+
+
+サブタスクg を用意
+
+.. code-block:: python
+
+    >>> g=group(add.s(1,1),add.s(2,2))
+
+同期呼び出し
+
+.. code-block:: python
+
+    >>> res=g.apply()
+    >>> type(res)
+    <class 'celery.result.GroupResult'>
+
+    >>> res.id
+    'eb068a37-a463-4ea4-9366-19e0fba95c8d'
+
+    >>> res.children
+    [<EagerResult: 302ee475-19d0-4347-b131-b378850c69b7>, <EagerResult: 36dc241d-1e9f-4057-a011-c64003010e58>]
+
+ここで、 グループタスク eb068a37-a463-4ea4-9366-19e0fba95c8d はProduceされません。
+
+
+非同期呼び出し
+
+.. code-block:: python
+
+
+    >>> res = g.apply_async()
+
+    >>> type(res)
+    <class 'celery.result.GroupResult'>
+
+    >>> res.id
+    '45356237-100b-442b-80dd-757faf015494'
+
+    >>> res.children
+    (<AsyncResult: 302ee475-19d0-4347-b131-b378850c69b7>, <AsyncResult: 36dc241d-1e9f-4057-a011-c64003010e58>)
+
+ここで、 グループタスク 45356237-100b-442b-80dd-757faf01549 はProduceされます。
+
+呼び出しグループタスク自体は異なるが、サブタスクは同じ
+
+.. code-block:: python
+
+    >>> g().id == g.apply_async().id
+    False
+
+    >>> g.delay().id == g.apply_async().id
+    False
+    
+    >>> g().children == g.apply_async().children
+    True
+
+    >>> g.delay().children == g.apply_async().children
+    True
+
+
+まぜるとか
+
+.. code-block:: python
+
+    >>> from app.tasks import *
+    >>> from celery import group
+    >>> from celery import chain
+
+    >>> g=group(add.s(1,2),add.s(2,3),add.s(3,4))
+    >>> c=chain(add.s(2, 2), add.s(4), add.s(8))
+
+    >>> g2=group(g,c)
+    >>> res=g2()
+
+    >>> type(res)
+    <class 'celery.result.GroupResult'>
+
+    >>> res.children
+    (<AsyncResult: 37643ceb-f8e6-4b4d-a0dc-4a99f7214f07>, <AsyncResult: 0be55acc-596d-4297-abf8-0a1207467d9f>)
+
+    >>> map(lambda r : r.get(), res.children)
+    [<GroupResult: 37643ceb-f8e6-4b4d-a0dc-4a99f7214f07 [cc123480-7995-4fd9-9618-41fb5b7b095a, 6b4db3a6-7253-4036-8873-2c69ab0e9879, f24740b1-5cb0-4905-aed5-ac31a2096eb9]>, 
+    16]
+
+    >>> map(lambda r : r.get(), res.children[0].children)
+    [[3, 5, 7]] 
+ 
 Chains( Taskのコールバークを連続的に行う)
 =================================================
 
+(((2+2) + 4 )  + 8 ) = 16 をやってみる
+
+.. code-block:: python 
+
+    >>> from celery import chain
+    >>> res = chain(add.s(2, 2), add.s(4), add.s(8))()
+
+    >>> res.result
+    16
+
+こうもかける :
+
+.. code-block:: python 
+
+    >>> res=(add.s(2, 2) | add.s(4) | add.s(8))()
+    >>> res.result
+    16
+
+immutable (状態変更不可能)だとchainする意味はあるか?
+
+.. code-block:: python 
+
+    >>> res=(add.si(1, 1) | add.si(4,1) | add.si(8,1))()
+    >>> res.result
+    9
+
+    >>> res.parent.result
+    5
+
+    >>> res.parent.parent.result
+    2
+
+サブタスク c を作る
+
+.. code-block:: python
+
+
+    >>> c=(add.s(2, 2) | add.s(4) | add.s(8))
+    >>> type(c)
+    <class 'celery.canvas.chain'>
+
+非同期呼び出し
+
+.. code-block:: python
+
+    >>> res=c()
+    >>> type(res)
+    <class 'celery.result.AsyncResult'>
+
+    >>> res.id
+    '0d7d902e-eb95-4bdd-b984-997397355f44'
+
+    >>> res.children == None
+    True
+
+    >>> print res.get(), res.parent.get(), res.parent.parent.get()
+    16 8 4
+
+    >>> c.apply_async()
+    <AsyncResult: 0d7d902e-eb95-4bdd-b984-997397355f44>
+
+同期呼び出し
+
+.. code-block:: python
+
+    >>> res=c.apply()
+    >>> type(res)
+    <class 'celery.result.EagerResult'>
+
+    >>> print res.get(), res.parent.get(), res.parent.parent.get()
+    16 8 4
+
+    >>> res.id
+    '0d7d902e-eb95-4bdd-b984-997397355f44'
+
+このidは先に非同期呼び出しした物と同じID。深い!
+ただし、別途subtaskを作り直して、apply()するとProduceされません。
+
+
+その他
+========
+
 Chords (コールバック付きGroups)
-=================================================
+-------------------------------------------------
 
 - header group + body group
 
 Map (引数リストの要素に対してTaskをを作る)
-===============================================================
+-------------------------------------------------
 
 - map( callbable, list ) みたい
 
 StarMap (Mapへのそれぞれの引数が \*args )
-===============================================================
+-------------------------------------------------
 
 Chunks(引数の一覧を等分割してGroup化)
-===============================================================
+-------------------------------------------------
 

celery/_sources/celery.txt

 Celeryとは?
 ====================================
 
+- http://celeryproject.org/
 
 
     Celery is an asynchronous task queue/job queue based on distributed message passing.
 Task Queue(タスクキュー)
 ====================================
 
+
+- http://docs.celeryproject.org/en/latest/getting-started/introduction.html#what-is-a-task-queue
+
+    Task queues are used as a mechanism to distribute work across threads or machines.
+
+    A task queue’s input is a unit of work, 
+    called a task, dedicated worker processes then constantly monitor the queue for new work to perform.
+
+    Celery communicates via messages using a broker to mediate between clients and workers. 
+    To initiate a task a client puts a message on the queue, 
+    the broker then delivers the message to a worker.
+
+    A Celery system can consist of multiple workers and brokers, 
+    giving way to high availability and horizontal scaling.
+
+    Celery is written in Python, 
+    but the protocol can be implemented in any language. 
+    So far there’s RCelery for the Ruby programming language, and a PHP client, 
+    but language interoperability can also be achieved by using webhooks.
+
 Asynchronous(非同期)
 ====================================
 
 Distributed Message Passing(分散メッセージ送信)
 ========================================================
 
+- メッセージ
+
+    - 「C++というオブジェクト指向言語では「メンバ関数の呼び出し」と呼びます。しかしObjective-Cでは明確に通信(メッセージ)と言われています。」
+
+- 分散
+
+    - 間にブローカーが入れば分散なのかな?   
+    - RabbitMQ  : http://www.rabbitmq.com/distributed.html
+    - WebSphere MQ (+ JMS?)
+    - MSMQ ( + COM+ Event?)
+
+
 Real=Time & Scheduling(リアルタイム/スケジュール)
 =======================================================
 

celery/_sources/celery_constructs.txt

 Kombu 
 ====================================
 
+- http://kombu.readthedocs.org/en/latest/index.html
+
 Message Brokerage
 ------------------------------------------
 

celery/_sources/concurrency.txt

     <AsyncResult: 55513afb-3c1a-41bc-b296-8b64026c30fd>
 
 
-.. figure::  _static/concurrency/concurrency_result.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/concurrency/concurrency_result.png"/>
+        <img src="_static/concurrency/concurrency_result.png"/>
+    </a>
 
 
 --concurrency指定しなくても1プロセスは--billiard-forkされます

celery/_sources/djcelery_diagram.txt

     :depth: 2
     :class: talks-contents
 
-TODO
+On Demand
 ==============
 
-TODO:Djang-celery のダイアグラムを作る
+.. raw:: html
+ 
+    <a  class="popup-image" id="popup-image" href="_static/djcelery_diagram/djcelery_diagram_ondemand.jpg">
+        <img src="_static/djcelery_diagram/djcelery_diagram_ondemand.jpg" width="300px"/>
+    </a>
+
+taskは少なくとも同じコード
+------------------------------
+
+各ノードは別のコンピュータでかまわない(分散)
 ---------------------------------------------
+
+Periodic
+==============
+
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/djcelery_diagram/djcelery_diagram_periodic.jpg">
+        <img src="_static/djcelery_diagram/djcelery_diagram_periodic.jpg" width="300px"/>
+    </a>
+
+
+--beat --scheduler=djcelery.schedulers.DatabaseScheduler
+------------------------------------------------------------------
+

celery/_sources/djkombu.txt

             print e
             pass
 
-.. image:: _static/run/simple01/admin_list.png
-
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/run/simple01/admin_list.png"/>
+        <img src="_static/run/simple01/admin_list.png"/>
+    </a>
 
 何が起きているか?
 =====================
 Queue
 ^^^^^^^^^^^
 
-.. image:: _static/run/simple01/admin_queue_list.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/run/simple01/admin_queue_list.png"/>
+        <img src="_static/run/simple01/admin_queue_list.png"/>
+    </a>
 
 タスクdelay呼び出し:Messageに追加
 -------------------------------------------------------------------------
 Message
 ^^^^^^^^^^
 
-.. image:: _static/run/simple01/admin_message_list.png  
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/run/simple01/admin_message_list.png"/>
+        <img src="_static/run/simple01/admin_message_list.png"/>
+    </a>
 
-.. image:: _static/run/simple01/admin_message.png  
-
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/run/simple01/admin_message.png"/>
+        <img src="_static/run/simple01/admin_message.png"/>
+    </a>
 
 ワーカーがMessageからレコード取り出しメッセージ復元
 -------------------------------------------------------
 AsyncResult =  TaksMeta モデル( task states )
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. image:: _static/run/simple01/admin_task_state.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/run/simple01/admin_task_state.png"/>
+        <img src="_static/run/simple01/admin_task_state.png"/>
+    </a>
 
 
 
-

celery/_sources/kombu.txt

 Messaging framework for Python
 ================================
 
+- http://kombu.readthedocs.org/en/latest/introduction.html
+
 :: 
 
     The aim of Kombu is to make messaging in Python as easy as possible 
 作業分担
 =========
 
-- http://kombu.readthedocs.org/en/latest/userguide/examples.html
-
 アプリケーション側 : Celery
 ---------------------------------------------
 
 メッセージイングブローカー側 : Kombu
 ---------------------------------------------
 
+Kombu:タスクキューの例
+-------------------------
 
-.. figure:: _static/kombu-title-image.png
-    :name:  popup-image
-    :class: popup-image
+- http://bit.ly/kombu_task_queue

celery/_sources/me.txt

 +hdknr/@hdknr
 ---------------------
 
+- http://gplus.to/hdknr
 - https://twitter.com/hdknr
 
 http://www.linkedin.com/in/hdknr/ja
 デジタルサイネージ(っぽい) (2001年〜)
 ------------------------------------------
 
+.. raw:: html
 
-.. figure:: _static/me/vision.jpg
-
+    <a  class="figure" id="card_fan_out" href="_static/me/vision.jpg">
+        <img src="_static/me/vision.jpg" width="300px" />
+    </a>
 
 メールマーケティング(2000年〜)
 ------------------------------
 OpenID Connect (2008年〜)
 -------------------------------------
 
-.. figure:: _static/me/OpenIDConnect-Map-v7.png
-    
-    OpenID Connect Protocol
-    ( from http://openid.net/connect/ )
+.. raw:: html
+
+    <a  class="figure" id="card_fan_out" href="_static/me/OpenIDConnect-Map-v7.png">
+        <img src="_static/me/OpenIDConnect-Map-v7.png" width="300px" />
+    </a>
 
 - http://openid.net/wg/connect/
 - #idcon 14th ~ BYOResume or DEAD! ~ ( http://idcon.doorkeeper.jp/events/1689 )

celery/_sources/monitor.txt

 django-celery : Django Admin UI
 ==================================================
 
-.. figure:: _static/monitor/monitor_admin_taskstate_list.png 
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/monitor/monitor_admin_taskstate_list.png"/>
+        <img src="_static/monitor/monitor_admin_taskstate_list.png"/>
+    </a>
+
 
 djcelery.models.TaskState
 ----------------------------
 .. figure:: _static/monitor/monitor_console_taskstate.png
 
 .. figure:: _static/monitor/monitor_console_taskresult.png          
+

celery/_sources/periodic.txt

 Periodic : タスク
 ----------------------------
 
-.. figure:: _static/periodic/periodic_task.png
+タスクの設定
+^^^^^^^^^^^^^^^^^^^^^^^^^
 
-    タスクの設定
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_task.png"/>
+        <img src="_static/periodic/periodic_task.png"/>
+    </a>
 
-.. figure:: _static/periodic/periodic_arguments.png
+タスクへの引数設定
+^^^^^^^^^^^^^^^^^^^^^^^^^
 
-    タスクへの引数設定
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_arguments.png"/>
+        <img src="_static/periodic/periodic_arguments.png"/>
+    </a>
 
-.. figure:: _static/periodic/periodic_options.png
+タスクの実行オプションの設定
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-    タスクの実行オプションの設定
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_options.png"/>
+        <img src="_static/periodic/periodic_options.png"/>
+    </a>
+
 
 Interval : 毎秒/分/時 
 ----------------------------
 
-.. figure:: _static/periodic/periodic_interval.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_interval.png"/>
+        <img src="_static/periodic/periodic_interval.png"/>
+    </a>
 
+5分が長いので、1分に変更し、引数にメッセージも入れた。途中変更も反映。
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. figure:: _static/periodic/periodic_result.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_result.png"/>
+        <img src="_static/periodic/periodic_result.png"/>
+    </a>
 
-    5分が長いので、1分に変更し、引数にメッセージも入れた。途中変更も反映。
 
 Crontab : crontab時間指定
 ----------------------------------
 
-.. figure:: _static/periodic/periodic_crontab.png
 
-.. figure:: _static/periodic/periodic_crontab_task.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_crontab.png"/>
+        <img src="_static/periodic/periodic_crontab.png"/>
+    </a>
 
-    IntervalかCrontabかはどちらか一方でのみ指定
+IntervalかCrontabかはどちらか一方でのみ指定
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. figure:: _static/periodic/periodic_crontab_result.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_crontab_task.png"/>
+        <img src="_static/periodic/periodic_crontab_task.png"/>
+    </a>
+
+
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/periodic/periodic_crontab_result.png"/>
+        <img src="_static/periodic/periodic_crontab_result.png"/>
+    </a>
 
 
 Django-Admin で変更すればスケジュール変わります

celery/_sources/rabbitmq_exchange.txt

 Fanout
 ============
 
-.. figure:: _static/rabbitmq/card_fan_out.jpg
+.. raw:: html
 
-    Fan out
+    <a  class="figure" id="card_fan_out" href="_static/rabbitmq/card_fan_out.jpg">
+        <img src="_static/rabbitmq/card_fan_out.jpg" />
+    </a>
 
 
 メッセージはExchangeにBindされている全てのQueueに送信されます。
 --------------------------------------------------------------------
 
-.. figure:: _static/rabbitmq/fanout-exchange.png
+- Red Hat Enterprise MRG "Chapter. 2 Exchange 参考
 
-    Red Hat Enterprise MRG "Chapter. 2 Exchange 参考
+.. raw:: html
+
+    <a  class="figure" id="fanout-exchange" href="_static/rabbitmq/fanout-exchange.png">
+        <img src="_static/rabbitmq/fanout-exchange.png" />
+    </a>
 
 - Routing Keyは見ません。
 - Celeryのデフォルトは CELERY_BROADCAST_EXCHANGE_TYPE で fanout が指定されます。
 Routing Key が Binding Key に一致したQueueにだけルートされます。
 ------------------------------------------------------------------
 
-.. figure:: _static/rabbitmq/direct-exchange.png
+.. raw:: html
 
-    Red Hat Enterprise MRG "Chapter. 2 Exchange 参考
-
+    <a  alt="Red Hat Enterprise MRG "Chapter. 2 Exchange 参考" 
+        class="figure" id="direct-exchange" href="_static/rabbitmq/direct-exchange.png">
+        <img src="_static/rabbitmq/direct-exchange.png" />
+    </a>
 
 
 Topic
 Routing Key がBinding Keyのパターンに一致した全てのQueueに送られます
 ----------------------------------------------------------------------------------
 
-.. figure:: _static/rabbitmq/topic-exchange.png
+.. raw:: html
 
-    Red Hat Enterprise MRG "Chapter. 2 Exchange 参考
+    <a  alt="Red Hat Enterprise MRG "Chapter. 2 Exchange 参考" 
+        class="figure" id="topic-exchange" href="_static/rabbitmq/topic-exchange.png">
+        <img src="_static/rabbitmq/topic-exchange.png" />
+    </a>
 
 
 Headers

celery/_sources/routing.txt

         Queue('soup', Exchange('soup'), routing_key='soup'),
     )
 
+AMQP: RabbitMQのルーティングを制御
+========================================
 
+
+
+

celery/_sources/security.txt

 - プロジェクトごとにバーチャル環境を用意して、BROKER_URLが異なるようにする
 
 
-.. figure:: _static/security/security_rabbitmq_virtual_host.png
+.. raw:: html
+ 
+    <a  class="figure" id="periodic" href="_static/security/security_rabbitmq_virtual_host.png"/>
+        <img src="_static/security/security_rabbitmq_virtual_host.png"/>
+    </a>
+
 
 .. code-block:: python
 

celery/_sources/signal.txt

 シグナルいろいろ
 ====================
 
+- http://celery.readthedocs.org/en/latest/userguide/signals.html
+
 Task
 -----
 
+- task_sent
+- task_prerun
+- task_postrun
+- task_success
+- task_failure
+- task_revoked
+
+
 Worker
 ----------
 
+
+- celeryd_after_setup
+- celeryd_init
+- worker_init
+- worker_ready
+- worker_process_init
+- worker_shutdown
+
+
 Celerybeat
 --------------------
 
+- beat_init
+- beat_embedded_init
+
+
 Eventlet
 ------------
 
+
+- eventlet_pool_started
+- eventlet_pool_preshutdown
+- eventlet_pool_postshutdown
+- eventlet_pool_apply
+
+
 Logging
 ------------
 
+- setup_logging
+- after_setup_logger
+- after_setup_task_logger
+

celery/_sources/task_queue.txt

 基本的デザインパターン
 ------------------------------------
 
+簡単なFIFOキュー
+^^^^^^^^^^^^^^^^^^
+
+- 「 Queue モジュールは、多生産者-多消費者(multi-producer, multi-consumer)キューを実装します。
+
+   これは、複数のスレッドの間で情報を安全に交換しなければならないときのマルチスレッドプログラミングで特に有益です。
+
+   このモジュールの Queue クラスは、必要なすべてのロックセマンティクスを実装しています。
+
+   これはPythonのスレッドサポートの状況に依存します。 threading モジュールを参照してください。」
+    
+    - http://www.python.jp/doc/release/library/queue.html
+
+.. code-block:: python
+
+    import Queue
+    
+    q = Queue.Queue()
+    
+    for i in range(5):
+        q.put(i)
+    
+    while not q.empty():
+        print q.get()
+
+しかし要件が複雑になるにつれて....
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+- http://www.doughellmann.com/PyMOTW-ja/Queue/
+
 enqueue/dequue
 ------------------------------------
 

celery/_sources/thankyou.txt

 @hdknr
 -----------------------------------------------------------
 
-
-.. figure:: _static/thankyou.png
-    :name:  popup-image
-    :class: popup-image
-

celery/_static/djcelery_diagram/djcelery_diagram_ondemand.jpg

Added
New image

celery/_static/djcelery_diagram/djcelery_diagram_periodic.jpg

Added
New image

celery/_static/talks.js

-function popup_image(){
-    $("#popup-image").fancybox({
-                padding: 0,
-                openEffect : 'elastic',
-                closeEffect : 'elastic',
-                closeClick : true,
-    }).trigger('click');
-
-//    setTimeout(function(){ $("#popup-image").trigger('click'); },500);
-}
-
 $(document).keydown(function(e) {
     switch (e.keyCode) {
         case 37:// <-
             break;
 
         case 73:    // I (shift-i)
-            popup_image();
+            $("#popup-image").trigger("click");
             break;
     }
 });
 
 $(document).ready(function(){
-    popup_image();
+
+    $("#popup-image").fancybox({
+                padding: 0,
+                openEffect : 'elastic',
+                closeEffect : 'elastic',
+                closeClick : true,
+    });
+
+    $(".figure").fancybox({
+                padding: 0,
+                openEffect : 'elastic',
+                closeEffect : 'elastic',
+                closeClick : true,
+    });
+
+    $("#popup-image").trigger("click");
 });

celery/async_usecase.html

 </li>
 </ul>
 </div>
-<div class="section" id="id2">
+<a  class="popup-image" id="popup-image" href="http://cdn.thenextweb.com/files/2010/08/stress_one.gif">
+    <img src="http://cdn.thenextweb.com/files/2010/08/stress_one.gif" width="300px"/>
+</a><div class="section" id="id2">
 <h2><a class="toc-backref" href="#id12">作業を貯めてあとでやる</a><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
 <li>Celery : apply_async(etc=時間)</li>

celery/canvas.html

 <h1>Canvas:サブタスクでワークフロー<a class="headerlink" href="#canvas" title="Permalink to this headline">¶</a></h1>
 <div class="contents talks-contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#subtask" id="id2">subtask</a><ul>
-<li><a class="reference internal" href="#task" id="id3">taskの内容を決めたもの</a></li>
-<li><a class="reference internal" href="#id1" id="id4">呼び出しを後で行う</a></li>
+<li><a class="reference internal" href="#subtask" id="id4">subtask</a><ul>
+<li><a class="reference internal" href="#task" id="id5">taskの内容を決めたもの</a></li>
+<li><a class="reference internal" href="#id1" id="id6">呼び出しを後で行う</a></li>
+<li><a class="reference internal" href="#id2" id="id7">複製</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#celey-canvas-signature-dict" id="id5">celey.canvas.Signature = dict + α</a><ul>
-<li><a class="reference internal" href="#apply-apply-async" id="id6">apply,apply_asyncする時に引数を更新できる</a></li>
-<li><a class="reference internal" href="#append-to-list-option-key-value-dict" id="id7">append_to_list_option(key,value)でdict操作</a></li>
-<li><a class="reference internal" href="#partial" id="id8">partial</a></li>
-<li><a class="reference internal" href="#immutable" id="id9">immutable</a></li>
-<li><a class="reference internal" href="#callbacks" id="id10">callbacks</a></li>
+<li><a class="reference internal" href="#celey-canvas-signature-dict" id="id8">celey.canvas.Signature = dict + α</a><ul>
+<li><a class="reference internal" href="#apply-apply-async" id="id9">apply,apply_asyncする時に引数を更新できる</a></li>
+<li><a class="reference internal" href="#append-to-list-option-key-value-dict" id="id10">append_to_list_option(key,value)でdict操作</a></li>
+<li><a class="reference internal" href="#partial" id="id11">partial</a></li>
+<li><a class="reference internal" href="#callbacks" id="id12">callbacks</a></li>
+<li><a class="reference internal" href="#immutable" id="id13">immutable</a></li>
+<li><a class="reference internal" href="#s-si" id="id14">ショートカット:s(),si()</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#groups-task" id="id11">Groups(グループ内のTaskを平行して実行する)</a></li>
-<li><a class="reference internal" href="#chains-task" id="id12">Chains( Taskのコールバークを連続的に行う)</a></li>
-<li><a class="reference internal" href="#chords-groups" id="id13">Chords (コールバック付きGroups)</a></li>
-<li><a class="reference internal" href="#map-task" id="id14">Map (引数リストの要素に対してTaskをを作る)</a></li>
-<li><a class="reference internal" href="#starmap-map-args" id="id15">StarMap (Mapへのそれぞれの引数が *args )</a></li>
-<li><a class="reference internal" href="#chunks-group" id="id16">Chunks(引数の一覧を等分割してGroup化)</a></li>
+<li><a class="reference internal" href="#groups-task" id="id15">Groups(グループ内のTaskを平行して実行する)</a></li>
+<li><a class="reference internal" href="#chains-task" id="id16">Chains( Taskのコールバークを連続的に行う)</a></li>
+<li><a class="reference internal" href="#id3" id="id17">その他</a><ul>
+<li><a class="reference internal" href="#chords-groups" id="id18">Chords (コールバック付きGroups)</a></li>
+<li><a class="reference internal" href="#map-task" id="id19">Map (引数リストの要素に対してTaskをを作る)</a></li>
+<li><a class="reference internal" href="#starmap-map-args" id="id20">StarMap (Mapへのそれぞれの引数が *args )</a></li>
+<li><a class="reference internal" href="#chunks-group" id="id21">Chunks(引数の一覧を等分割してGroup化)</a></li>
+</ul>
+</li>
 </ul>
 </div>
 <div class="section" id="subtask">
-<h2><a class="toc-backref" href="#id2">subtask</a><a class="headerlink" href="#subtask" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id4">subtask</a><a class="headerlink" href="#subtask" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
 <li><a class="reference external" href="http://docs.celeryproject.org/en/latest/userguide/canvas.html">http://docs.celeryproject.org/en/latest/userguide/canvas.html</a></li>
 </ul>
 <div class="section" id="task">
-<h3><a class="toc-backref" href="#id3">taskの内容を決めたもの</a><a class="headerlink" href="#task" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id5">taskの内容を決めたもの</a><a class="headerlink" href="#task" title="Permalink to this headline">¶</a></h3>
 <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">app.tasks</span> <span class="kn">import</span> <span class="o">*</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">h1</span> <span class="o">=</span> <span class="n">hello</span><span class="o">.</span><span class="n">subtask</span><span class="p">(</span><span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="s">&quot;I&#39;am  a cat&quot;</span><span class="p">])</span>
 <span class="gp">&gt;&gt;&gt; </span><span class="n">h1</span>
 </div>
 </div>
 <div class="section" id="id1">
-<h3><a class="toc-backref" href="#id4">呼び出しを後で行う</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id6">呼び出しを後で行う</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
 <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">h1</span><span class="o">.</span><span class="n">apply</span><span class="p">()</span>
 <span class="go">&lt;EagerResult: a701c9a4-11fc-42f3-aae8-341f7098a9c5</span>
 
 </pre></div>
 </div>
 </div>
+<div class="section" id="id2">
+<h3><a class="toc-backref" href="#id7">複製</a><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">clone</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span>
+
+<span class="go">app.tasks.add(2, 5)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span>
+<span class="go">app.tasks.add(2, 5)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="p">(</span><span class="mi">100</span><span class="p">,</span><span class="mi">200</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span>
+<span class="go">app.tasks.add(2, 5)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t2</span>
+<span class="go">app.tasks.add(100, 200)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">=</span><span class="n">t2</span><span class="o">.</span><span class="n">delay</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">.</span><span class="n">result</span>
+<span class="go">300</span>
+</pre></div>
+</div>
+</div>
 </div>
 <div class="section" id="celey-canvas-signature-dict">
-<h2><a class="toc-backref" href="#id5">celey.canvas.Signature = dict + α</a><a class="headerlink" href="#celey-canvas-signature-dict" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id8">celey.canvas.Signature = dict + α</a><a class="headerlink" href="#celey-canvas-signature-dict" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
 <li><a class="reference external" href="http://bit.ly/celery_canvas_signature">http://bit.ly/celery_canvas_signature</a></li>
 </ul>
 <div class="section" id="apply-apply-async">
-<h3><a class="toc-backref" href="#id6">apply,apply_asyncする時に引数を更新できる</a><a class="headerlink" href="#apply-apply-async" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id9">apply,apply_asyncする時に引数を更新できる</a><a class="headerlink" href="#apply-apply-async" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>def _merge(...)</li>
 </ul>
 </div>
 <div class="section" id="append-to-list-option-key-value-dict">
-<h3><a class="toc-backref" href="#id7">append_to_list_option(key,value)でdict操作</a><a class="headerlink" href="#append-to-list-option-key-value-dict" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id10">append_to_list_option(key,value)でdict操作</a><a class="headerlink" href="#append-to-list-option-key-value-dict" title="Permalink to this headline">¶</a></h3>
 </div>
 <div class="section" id="partial">
-<h3><a class="toc-backref" href="#id8">partial</a><a class="headerlink" href="#partial" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id11">partial</a><a class="headerlink" href="#partial" title="Permalink to this headline">¶</a></h3>
+<p>タスクの引数は部分的に変更可能。</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
+<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">app.tasks</span> <span class="kn">import</span> \<span class="o">*</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">=</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.canvas.Signature&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">str</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
+<span class="go">&#39;app.tasks.add(2)&#39;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">delay</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">.</span><span class="n">result</span>
+
+<span class="go">TypeError(&#39;add() takes exactly 2 arguments (1 given)&#39;,)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">=</span><span class="n">t</span><span class="o">.</span><span class="n">delay</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">.</span><span class="n">result</span>
+<span class="go">5</span>
+
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">args</span> <span class="o">+</span> <span class="p">(</span><span class="mi">5</span><span class="p">,)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">r</span><span class="o">.</span><span class="n">result</span>
+<span class="go">7</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="callbacks">
+<h3><a class="toc-backref" href="#id12">callbacks</a><a class="headerlink" href="#callbacks" title="Permalink to this headline">¶</a></h3>
+<ul class="simple">
+<li>タスクの後に実行するタスクを指定可能 -&gt; ワークフロー(Canvas)</li>
+</ul>
 </div>
 <div class="section" id="immutable">
-<h3><a class="toc-backref" href="#id9">immutable</a><a class="headerlink" href="#immutable" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id13">immutable</a><a class="headerlink" href="#immutable" title="Permalink to this headline">¶</a></h3>
+<ul class="simple">
+<li>普遍 = 親タスクの結果を見ない</li>
+</ul>
+<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
+<span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">y</span>
+</pre></div>
 </div>
-<div class="section" id="callbacks">
-<h3><a class="toc-backref" href="#id10">callbacks</a><a class="headerlink" href="#callbacks" title="Permalink to this headline">¶</a></h3>
+<div class="highlight-python"><div class="highlight"><pre><span class="nd">@task</span>
+<span class="k">def</span> <span class="nf">linkedon</span><span class="p">(</span> \<span class="o">*</span><span class="n">args</span><span class="p">,</span><span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+    <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
+</pre></div>
+</div>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">=</span><span class="n">add</span><span class="o">.</span><span class="n">apply_async</span><span class="p">((</span><span class="mi">9</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="n">link</span><span class="o">=</span><span class="n">linkedon</span><span class="o">.</span><span class="n">subtask</span><span class="p">((),{</span><span class="s">&#39;msg&#39;</span><span class="p">:</span><span class="s">&#39;fine&#39;</span><span class="p">}))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">result</span>
+<span class="go">&quot;(12,){&#39;msg&#39;: &#39;fine&#39;}&quot;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">=</span><span class="n">add</span><span class="o">.</span><span class="n">apply_async</span><span class="p">((</span><span class="mi">9</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="n">link</span><span class="o">=</span><span class="n">linkedon</span><span class="o">.</span><span class="n">subtask</span><span class="p">((),{</span><span class="s">&#39;msg&#39;</span><span class="p">:</span><span class="s">&#39;fine&#39;</span><span class="p">},</span><span class="n">immutable</span><span class="o">=</span><span class="bp">True</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">result</span>
+<span class="go">&quot;(){&#39;msg&#39;: &#39;fine&#39;}&quot;</span>
+</pre></div>
+</div>
+</div>
+<div class="section" id="s-si">
+<h3><a class="toc-backref" href="#id14">ショートカット:s(),si()</a><a class="headerlink" href="#s-si" title="Permalink to this headline">¶</a></h3>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">=</span><span class="n">add</span><span class="o">.</span><span class="n">apply_async</span><span class="p">((</span><span class="mi">9</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="n">link</span><span class="o">=</span><span class="n">linkedon</span><span class="o">.</span><span class="n">s</span><span class="p">((),{</span><span class="s">&#39;msg&#39;</span><span class="p">:</span><span class="s">&#39;fine&#39;</span><span class="p">}))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">result</span>
+<span class="go">&quot;(12, (), {&#39;msg&#39;: &#39;fine&#39;}){}&quot;</span>
+
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">=</span><span class="n">add</span><span class="o">.</span><span class="n">apply_async</span><span class="p">((</span><span class="mi">9</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="n">link</span><span class="o">=</span><span class="n">linkedon</span><span class="o">.</span><span class="n">si</span><span class="p">((),{</span><span class="s">&#39;msg&#39;</span><span class="p">:</span><span class="s">&#39;fine&#39;</span><span class="p">}))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">t</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">result</span>
+<span class="go">&quot;((), {&#39;msg&#39;: &#39;fine&#39;}){}&quot;</span>
+</pre></div>
+</div>
 </div>
 </div>
 <div class="section" id="groups-task">
-<h2><a class="toc-backref" href="#id11">Groups(グループ内のTaskを平行して実行する)</a><a class="headerlink" href="#groups-task" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id15">Groups(グループ内のTaskを平行して実行する)</a><a class="headerlink" href="#groups-task" title="Permalink to this headline">¶</a></h2>
+<p>まとめられる。</p>
+<div class="highlight-python"><pre>&gt;&gt;&gt; from celery import group
+&gt;&gt;&gt; res=group(add.s(1,2),add.s(2,3),add.s(3,4))()
+
+&gt;&gt;&gt; res.result
+
+Traceback (most recent call last):
+File "&lt;console&gt;", line 1, in &lt;module&gt;
+AttributeError: 'GroupResult' object has no attribute 'result'
+
+&gt;&gt;&gt; res.get()
+[3, 5, 7]</pre>
+</div>
+<p>GroupResult</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.GroupResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">id</span>
+<span class="go">&#39;7bbf1f1b-eafa-4924-a8a2-5d924ff1f131&#39;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">children</span>
+<span class="go">(&lt;AsyncResult: 56bca686-7eec-405a-a030-87cf4ede955f&gt;,</span>
+<span class="go">&lt;AsyncResult: 41d543d4-400b-4727-a388-02813605d7c2&gt;,</span>
+<span class="go">&lt;AsyncResult: 1c3f0564-ac7d-4848-9caf-f72e6244ae23&gt;)</span>
+</pre></div>
+</div>
+<p>タスク付け足し</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">tasks</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">tasks</span> <span class="o">+</span> <span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">),)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">tasks</span>
+<span class="go">(app.tasks.add(1, 2), app.tasks.add(2, 3), app.tasks.add(3, 4), app.tasks.add(4, 5))</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="n">g</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
+<span class="go">[3, 5, 7, 9]</span>
+</pre></div>
+</div>
+<p>サブタスクg を用意</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">=</span><span class="n">group</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">))</span>
+</pre></div>
+</div>
+<p>同期呼び出し</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="n">g</span><span class="o">.</span><span class="n">apply</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.GroupResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">id</span>
+<span class="go">&#39;eb068a37-a463-4ea4-9366-19e0fba95c8d&#39;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">children</span>
+<span class="go">[&lt;EagerResult: 302ee475-19d0-4347-b131-b378850c69b7&gt;, &lt;EagerResult: 36dc241d-1e9f-4057-a011-c64003010e58&gt;]</span>
+</pre></div>
+</div>
+<p>ここで、 グループタスク eb068a37-a463-4ea4-9366-19e0fba95c8d はProduceされません。</p>
+<p>非同期呼び出し</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span> <span class="o">=</span> <span class="n">g</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.GroupResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">id</span>
+<span class="go">&#39;45356237-100b-442b-80dd-757faf015494&#39;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">children</span>
+<span class="go">(&lt;AsyncResult: 302ee475-19d0-4347-b131-b378850c69b7&gt;, &lt;AsyncResult: 36dc241d-1e9f-4057-a011-c64003010e58&gt;)</span>
+</pre></div>
+</div>
+<p>ここで、 グループタスク 45356237-100b-442b-80dd-757faf01549 はProduceされます。</p>
+<p>呼び出しグループタスク自体は異なるが、サブタスクは同じ</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span><span class="o">.</span><span class="n">id</span>
+<span class="go">False</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">delay</span><span class="p">()</span><span class="o">.</span><span class="n">id</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span><span class="o">.</span><span class="n">id</span>
+<span class="go">False</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="p">()</span><span class="o">.</span><span class="n">children</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span><span class="o">.</span><span class="n">children</span>
+<span class="go">True</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">.</span><span class="n">delay</span><span class="p">()</span><span class="o">.</span><span class="n">children</span> <span class="o">==</span> <span class="n">g</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span><span class="o">.</span><span class="n">children</span>
+<span class="go">True</span>
+</pre></div>
+</div>
+<p>まぜるとか</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">app.tasks</span> <span class="kn">import</span> <span class="o">*</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">celery</span> <span class="kn">import</span> <span class="n">group</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">celery</span> <span class="kn">import</span> <span class="n">chain</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g</span><span class="o">=</span><span class="n">group</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">=</span><span class="n">chain</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">g2</span><span class="o">=</span><span class="n">group</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="n">c</span><span class="p">)</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="n">g2</span><span class="p">()</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.GroupResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">children</span>
+<span class="go">(&lt;AsyncResult: 37643ceb-f8e6-4b4d-a0dc-4a99f7214f07&gt;, &lt;AsyncResult: 0be55acc-596d-4297-abf8-0a1207467d9f&gt;)</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">r</span> <span class="p">:</span> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">children</span><span class="p">)</span>
+<span class="go">[&lt;GroupResult: 37643ceb-f8e6-4b4d-a0dc-4a99f7214f07 [cc123480-7995-4fd9-9618-41fb5b7b095a, 6b4db3a6-7253-4036-8873-2c69ab0e9879, f24740b1-5cb0-4905-aed5-ac31a2096eb9]&gt;,</span>
+<span class="go">16]</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">map</span><span class="p">(</span><span class="k">lambda</span> <span class="n">r</span> <span class="p">:</span> <span class="n">r</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">children</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">children</span><span class="p">)</span>
+<span class="go">[[3, 5, 7]]</span>
+</pre></div>
+</div>
 </div>
 <div class="section" id="chains-task">
-<h2><a class="toc-backref" href="#id12">Chains( Taskのコールバークを連続的に行う)</a><a class="headerlink" href="#chains-task" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id16">Chains( Taskのコールバークを連続的に行う)</a><a class="headerlink" href="#chains-task" title="Permalink to this headline">¶</a></h2>
+<p>(((2+2) + 4 )  + 8 ) = 16 をやってみる</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">celery</span> <span class="kn">import</span> <span class="n">chain</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span> <span class="o">=</span> <span class="n">chain</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">4</span><span class="p">),</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">8</span><span class="p">))()</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">result</span>
+<span class="go">16</span>
+</pre></div>
 </div>
+<p>こうもかける :</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">8</span><span class="p">))()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">result</span>
+<span class="go">16</span>
+</pre></div>
+</div>
+<p>immutable (状態変更不可能)だとchainする意味はあるか?</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">si</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">si</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">si</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">1</span><span class="p">))()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">result</span>
+<span class="go">9</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">result</span>
+<span class="go">5</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">result</span>
+<span class="go">2</span>
+</pre></div>
+</div>
+<p>サブタスク c を作る</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">=</span><span class="p">(</span><span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">|</span> <span class="n">add</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.canvas.chain&#39;&gt;</span>
+</pre></div>
+</div>
+<p>非同期呼び出し</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="n">c</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.AsyncResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">id</span>
+<span class="go">&#39;0d7d902e-eb95-4bdd-b984-997397355f44&#39;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">children</span> <span class="o">==</span> <span class="bp">None</span>
+<span class="go">True</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
+<span class="go">16 8 4</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">c</span><span class="o">.</span><span class="n">apply_async</span><span class="p">()</span>
+<span class="go">&lt;AsyncResult: 0d7d902e-eb95-4bdd-b984-997397355f44&gt;</span>
+</pre></div>
+</div>
+<p>同期呼び出し</p>
+<div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">=</span><span class="n">c</span><span class="o">.</span><span class="n">apply</span><span class="p">()</span>
+<span class="gp">&gt;&gt;&gt; </span><span class="nb">type</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
+<span class="go">&lt;class &#39;celery.result.EagerResult&#39;&gt;</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="k">print</span> <span class="n">res</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span> <span class="n">res</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
+<span class="go">16 8 4</span>
+
+<span class="gp">&gt;&gt;&gt; </span><span class="n">res</span><span class="o">.</span><span class="n">id</span>
+<span class="go">&#39;0d7d902e-eb95-4bdd-b984-997397355f44&#39;</span>
+</pre></div>
+</div>
+<p>このidは先に非同期呼び出しした物と同じID。深い!
+ただし、別途subtaskを作り直して、apply()するとProduceされません。</p>
+</div>
+<div class="section" id="id3">
+<h2><a class="toc-backref" href="#id17">その他</a><a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="chords-groups">
-<h2><a class="toc-backref" href="#id13">Chords (コールバック付きGroups)</a><a class="headerlink" href="#chords-groups" title="Permalink to this headline">¶</a></h2>
+<h3><a class="toc-backref" href="#id18">Chords (コールバック付きGroups)</a><a class="headerlink" href="#chords-groups" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>header group + body group</li>
 </ul>
 </div>
 <div class="section" id="map-task">
-<h2><a class="toc-backref" href="#id14">Map (引数リストの要素に対してTaskをを作る)</a><a class="headerlink" href="#map-task" title="Permalink to this headline">¶</a></h2>
+<h3><a class="toc-backref" href="#id19">Map (引数リストの要素に対してTaskをを作る)</a><a class="headerlink" href="#map-task" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
 <li>map( callbable, list ) みたい</li>
 </ul>
 </div>
 <div class="section" id="starmap-map-args">
-<h2><a class="toc-backref" href="#id15">StarMap (Mapへのそれぞれの引数が *args )</a><a class="headerlink" href="#starmap-map-args" title="Permalink to this headline">¶</a></h2>
+<h3><a class="toc-backref" href="#id20">StarMap (Mapへのそれぞれの引数が *args )</a><a class="headerlink" href="#starmap-map-args" title="Permalink to this headline">¶</a></h3>
 </div>
 <div class="section" id="chunks-group">
-<h2><a class="toc-backref" href="#id16">Chunks(引数の一覧を等分割してGroup化)</a><a class="headerlink" href="#chunks-group" title="Permalink to this headline">¶</a></h2>
+<h3><a class="toc-backref" href="#id21">Chunks(引数の一覧を等分割してGroup化)</a><a class="headerlink" href="#chunks-group" title="Permalink to this headline">¶</a></h3>
+</div>
 </div>
 </div>
 

celery/celery.html

 </div>
 <div class="section" id="id1">
 <h2><a class="toc-backref" href="#id2">Celeryとは?</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
+<ul>
+<li><p class="first"><a class="reference external" href="http://celeryproject.org/">http://celeryproject.org/</a></p>
 <blockquote>
 <div><p>Celery is an asynchronous task queue/job queue based on distributed message passing.
 It is focused on real-time operation, but supports scheduling as well.</p>
 <p>Tasks can execute asynchronously (in the background) or synchronously (wait until ready).</p>
 <p>Celery is used in production systems to process millions of tasks a day.</p>
 </div></blockquote>
+</li>
+</ul>
 </div>
 <div class="section" id="task-queue">
 <h2><a class="toc-backref" href="#id3">Task Queue(タスクキュー)</a><a class="headerlink" href="#task-queue" title="Permalink to this headline">¶</a></h2>
+<ul>
+<li><p class="first"><a class="reference external" href="http://docs.celeryproject.org/en/latest/getting-started/introduction.html#what-is-a-task-queue">http://docs.celeryproject.org/en/latest/getting-started/introduction.html#what-is-a-task-queue</a></p>
+<blockquote>
+<div><p>Task queues are used as a mechanism to distribute work across threads or machines.</p>
+<p>A task queue’s input is a unit of work,
+called a task, dedicated worker processes then constantly monitor the queue for new work to perform.</p>
+<p>Celery communicates via messages using a broker to mediate between clients and workers.
+To initiate a task a client puts a message on the queue,
+the broker then delivers the message to a worker.</p>
+<p>A Celery system can consist of multiple workers and brokers,
+giving way to high availability and horizontal scaling.</p>
+<p>Celery is written in Python,
+but the protocol can be implemented in any language.
+So far there’s RCelery for the Ruby programming language, and a PHP client,
+but language interoperability can also be achieved by using webhooks.</p>
+</div></blockquote>
+</li>
+</ul>
 </div>
 <div class="section" id="asynchronous">
 <h2><a class="toc-backref" href="#id4">Asynchronous(非同期)</a><a class="headerlink" href="#asynchronous" title="Permalink to this headline">¶</a></h2>
 </div>
 <div class="section" id="distributed-message-passing">
 <h2><a class="toc-backref" href="#id5">Distributed Message Passing(分散メッセージ送信)</a><a class="headerlink" href="#distributed-message-passing" title="Permalink to this headline">¶</a></h2>
+<ul>
+<li><p class="first">メッセージ</p>
+<blockquote>
+<div><ul class="simple">
+<li>「C++というオブジェクト指向言語では「メンバ関数の呼び出し」と呼びます。しかしObjective-Cでは明確に通信(メッセージ)と言われています。」</li>
+</ul>
+</div></blockquote>
+</li>
+<li><p class="first">分散</p>
+<blockquote>
+<div><ul class="simple">
+<li>間にブローカーが入れば分散なのかな?</li>
+<li>RabbitMQ  : <a class="reference external" href="http://www.rabbitmq.com/distributed.html">http://www.rabbitmq.com/distributed.html</a></li>
+<li>WebSphere MQ (+ JMS?)</li>
+<li>MSMQ ( + COM+ Event?)</li>
+</ul>
+</div></blockquote>
+</li>
+</ul>
 </div>
 <div class="section" id="real-time-scheduling">
 <h2><a class="toc-backref" href="#id6">Real=Time &amp; Scheduling(リアルタイム/スケジュール)</a><a class="headerlink" href="#real-time-scheduling" title="Permalink to this headline">¶</a></h2>

celery/celery_constructs.html

 </div>
 <div class="section" id="kombu">
 <h2><a class="toc-backref" href="#id5">Kombu</a><a class="headerlink" href="#kombu" title="Permalink to this headline">¶</a></h2>
+<ul class="simple">
+<li><a class="reference external" href="http://kombu.readthedocs.org/en/latest/index.html">http://kombu.readthedocs.org/en/latest/index.html</a></li>
+</ul>
 <div class="section" id="message-brokerage">
 <h3><a class="toc-backref" href="#id6">Message Brokerage</a><a class="headerlink" href="#message-brokerage" title="Permalink to this headline">¶</a></h3>
 </div>

celery/concurrency.html

 <span class="go">&lt;AsyncResult: 55513afb-3c1a-41bc-b296-8b64026c30fd&gt;</span>
 </pre></div>
 </div>
-<div class="figure">
-<img alt="_images/concurrency_result.png" src="_images/concurrency_result.png" />
-</div>
-<div class="section" id="concurrency1-billiard-fork">
+<a  class="figure" id="periodic" href="_static/concurrency/concurrency_result.png"/>
+    <img src="_static/concurrency/concurrency_result.png"/>
+</a><div class="section" id="concurrency1-billiard-fork">
 <h3><a class="toc-backref" href="#id5">&#8211;concurrency指定しなくても1プロセスは&#8211;billiard-forkされます</a><a class="headerlink" href="#concurrency1-billiard-fork" title="Permalink to this headline">¶</a></h3>
 </div>
 </div>

celery/djcelery_diagram.html

 <h1>Djcelery : 実行ダイアグラム<a class="headerlink" href="#djcelery" title="Permalink to this headline">¶</a></h1>
 <div class="contents talks-contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#todo" id="id1">TODO</a><ul>
-<li><a class="reference internal" href="#todo-djang-celery" id="id2">TODO:Djang-celery のダイアグラムを作る</a></li>
+<li><a class="reference internal" href="#on-demand" id="id2">On Demand</a><ul>
+<li><a class="reference internal" href="#task" id="id3">taskは少なくとも同じコード</a></li>
+<li><a class="reference internal" href="#id1" id="id4">各ノードは別のコンピュータでかまわない(分散)</a></li>
+</ul>
+</li>
+<li><a class="reference internal" href="#periodic" id="id5">Periodic</a><ul>
+<li><a class="reference internal" href="#beat-scheduler-djcelery-schedulers-databasescheduler" id="id6">&#8211;beat &#8211;scheduler=djcelery.schedulers.DatabaseScheduler</a></li>
 </ul>
 </li>
 </ul>
 </div>
-<div class="section" id="todo">
-<h2><a class="toc-backref" href="#id1">TODO</a><a class="headerlink" href="#todo" title="Permalink to this headline">¶</a></h2>
-<div class="section" id="todo-djang-celery">
-<h3><a class="toc-backref" href="#id2">TODO:Djang-celery のダイアグラムを作る</a><a class="headerlink" href="#todo-djang-celery" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="on-demand">
+<h2><a class="toc-backref" href="#id2">On Demand</a><a class="headerlink" href="#on-demand" title="Permalink to this headline">¶</a></h2>
+<a  class="popup-image" id="popup-image" href="_static/djcelery_diagram/djcelery_diagram_ondemand.jpg">
+    <img src="_static/djcelery_diagram/djcelery_diagram_ondemand.jpg" width="300px"/>
+</a><div class="section" id="task">
+<h3><a class="toc-backref" href="#id3">taskは少なくとも同じコード</a><a class="headerlink" href="#task" title="Permalink to this headline">¶</a></h3>
+</div>
+<div class="section" id="id1">
+<h3><a class="toc-backref" href="#id4">各ノードは別のコンピュータでかまわない(分散)</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
+</div>
+</div>
+<div class="section" id="periodic">
+<h2><a class="toc-backref" href="#id5">Periodic</a><a class="headerlink" href="#periodic" title="Permalink to this headline">¶</a></h2>
+<a  class="figure" id="periodic" href="_static/djcelery_diagram/djcelery_diagram_periodic.jpg">
+    <img src="_static/djcelery_diagram/djcelery_diagram_periodic.jpg" width="300px"/>
+</a><div class="section" id="beat-scheduler-djcelery-schedulers-databasescheduler">
+<h3><a class="toc-backref" href="#id6">&#8211;beat &#8211;scheduler=djcelery.schedulers.DatabaseScheduler</a><a class="headerlink" href="#beat-scheduler-djcelery-schedulers-databasescheduler" title="Permalink to this headline">¶</a></h3>
 </div>
 </div>
 </div>

celery/djkombu.html

         <span class="k">pass</span>
 </pre></div>
 </div>
-<img alt="_images/admin_list.png" src="_images/admin_list.png" />
-</div>
+<a  class="figure" id="periodic" href="_static/run/simple01/admin_list.png"/>
+    <img src="_static/run/simple01/admin_list.png"/>
+</a></div>
 </div>
 <div class="section" id="id1">
 <h2><a class="toc-backref" href="#id7">何が起きているか?</a><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
 <p>pidbox : Workerのリモートコントロールコマンド用のキュー</p>
 <div class="section" id="queue">
 <h4>Queue<a class="headerlink" href="#queue" title="Permalink to this headline">¶</a></h4>
-<img alt="_images/admin_queue_list.png" src="_images/admin_queue_list.png" />
-</div>
+<a  class="figure" id="periodic" href="_static/run/simple01/admin_queue_list.png"/>
+    <img src="_static/run/simple01/admin_queue_list.png"/>
+</a></div>
 </div>
 <div class="section" id="delay-message">
 <h3><a class="toc-backref" href="#id9">タスクdelay呼び出し:Messageに追加</a><a class="headerlink" href="#delay-message" title="Permalink to this headline">¶</a></h3>
 <div class="section" id="message">
 <h4>Message<a class="headerlink" href="#message" title="Permalink to this headline">¶</a></h4>
-<img alt="_images/admin_message_list.png" src="_images/admin_message_list.png" />
-<img alt="_images/admin_message.png" src="_images/admin_message.png" />
-</div>
+<a  class="figure" id="periodic" href="_static/run/simple01/admin_message_list.png"/>
+    <img src="_static/run/simple01/admin_message_list.png"/>
+</a><a  class="figure" id="periodic" href="_static/run/simple01/admin_message.png"/>
+    <img src="_static/run/simple01/admin_message.png"/>
+</a></div>
 </div>
 <div class="section" id="id3">
 <h3><a class="toc-backref" href="#id10">ワーカーがMessageからレコード取り出しメッセージ復元</a><a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
 <h3><a class="toc-backref" href="#id12">ワーカーがTaskMetaをSUCCESS更新</a><a class="headerlink" href="#taskmetasuccess" title="Permalink to this headline">¶</a></h3>
 <div class="section" id="asyncresult-taksmeta-task-states">
 <h4>AsyncResult =  TaksMeta モデル( task states )<a class="headerlink" href="#asyncresult-taksmeta-task-states" title="Permalink to this headline">¶</a></h4>
-<img alt="_images/admin_task_state.png" src="_images/admin_task_state.png" />
-</div>
+<a  class="figure" id="periodic" href="_static/run/simple01/admin_task_state.png"/>
+    <img src="_static/run/simple01/admin_task_state.png"/>
+</a></div>
 </div>
 </div>
 </div>

celery/index.html

 <li class="toctree-l1"><a class="reference internal" href="task_queue.html">Task Queue</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="task_queue.html#queue">Queue</a></li>
 <li class="toctree-l2"><a class="reference internal" href="task_queue.html#message-queue">Message Queue</a></li>
-<li class="toctree-l2"><a class="reference internal" href="task_queue.html#id2">Task Queue</a></li>
+<li class="toctree-l2"><a class="reference internal" href="task_queue.html#id3">Task Queue</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="idempotence.html">冪等性(idempotence )</a><ul>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="djcelery_diagram.html">Djcelery : 実行ダイアグラム</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="djcelery_diagram.html#todo">TODO</a></li>
+<li class="toctree-l2"><a class="reference internal" href="djcelery_diagram.html#on-demand">On Demand</a></li>
+<li class="toctree-l2"><a class="reference internal" href="djcelery_diagram.html#periodic">Periodic</a></li>
 </ul>
 </li>
 </ul>
 <li class="toctree-l2"><a class="reference internal" href="periodic.html#django-celerydjango-adimin">django-celeryならDjango Adiminで簡単設定</a></li>
 <li class="toctree-l2"><a class="reference internal" href="periodic.html#celery-beat">celery beat が必要</a></li>
 <li class="toctree-l2"><a class="reference internal" href="periodic.html#s-schedulde">-s/&#8211;schedulde : スケジュールファイル</a></li>
-<li class="toctree-l2"><a class="reference internal" href="periodic.html#id3">アプリケーションからスケジュールファイルを動的に追加/変更する</a></li>
+<li class="toctree-l2"><a class="reference internal" href="periodic.html#id7">アプリケーションからスケジュールファイルを動的に追加/変更する</a></li>
 </ul>
 </li>
 </ul>
 <li class="toctree-l2"><a class="reference internal" href="canvas.html#celey-canvas-signature-dict">celey.canvas.Signature = dict + α</a></li>
 <li class="toctree-l2"><a class="reference internal" href="canvas.html#groups-task">Groups(グループ内のTaskを平行して実行する)</a></li>
 <li class="toctree-l2"><a class="reference internal" href="canvas.html#chains-task">Chains( Taskのコールバークを連続的に行う)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="canvas.html#chords-groups">Chords (コールバック付きGroups)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="canvas.html#map-task">Map (引数リストの要素に対してTaskをを作る)</a></li>
-<li class="toctree-l2"><a class="reference internal" href="canvas.html#starmap-map-args">StarMap (Mapへのそれぞれの引数が *args )</a></li>
-<li class="toctree-l2"><a class="reference internal" href="canvas.html#chunks-group">Chunks(引数の一覧を等分割してGroup化)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="canvas.html#id3">その他</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="signal.html">Signal</a><ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="routing.html">ルーティング</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="routing.html#celery-create-missing-queues-true">自動:CELERY_CREATE_MISSING_QUEUES=True</a></li>
+<li class="toctree-l2"><a class="reference internal" href="routing.html#amqp-rabbitmq">AMQP: RabbitMQのルーティングを制御</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="daemonize.html">デーモン化/init.d化</a><ul>

celery/kombu.html

 <h1>Kombu: Messaging Everything<a class="headerlink" href="#kombu-messaging-everything" title="Permalink to this headline">¶</a></h1>
 <div class="contents talks-contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#messaging-framework-for-python" id="id10">Messaging framework for Python</a></li>
-<li><a class="reference internal" href="#transport-native-virtual" id="id11">Transport (Native &amp; Virtual )</a><ul>
-<li><a class="reference internal" href="#native" id="id12">Native</a></li>
-<li><a class="reference internal" href="#virtual" id="id13">Virtual</a></li>
+<li><a class="reference internal" href="#messaging-framework-for-python" id="id11">Messaging framework for Python</a></li>
+<li><a class="reference internal" href="#transport-native-virtual" id="id12">Transport (Native &amp; Virtual )</a><ul>
+<li><a class="reference internal" href="#native" id="id13">Native</a></li>
+<li><a class="reference internal" href="#virtual" id="id14">Virtual</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#id9" id="id14">作業分担</a><ul>
-<li><a class="reference internal" href="#celery" id="id15">アプリケーション側 : Celery</a></li>
-<li><a class="reference internal" href="#kombu" id="id16">メッセージイングブローカー側 : Kombu</a></li>
+<li><a class="reference internal" href="#id9" id="id15">作業分担</a><ul>
+<li><a class="reference internal" href="#celery" id="id16">アプリケーション側 : Celery</a></li>
+<li><a class="reference internal" href="#kombu" id="id17">メッセージイングブローカー側 : Kombu</a></li>
+<li><a class="reference internal" href="#id10" id="id18">Kombu:タスクキューの例</a></li>
 </ul>
 </li>
 </ul>
 <a  class="popup-image" id="popup-image" href="_static/kombu-title-image.png">
     <img src="_static/kombu-title-image.png" width="300px"/>
 </a><div class="section" id="messaging-framework-for-python">
-<h2><a class="toc-backref" href="#id10">Messaging framework for Python</a><a class="headerlink" href="#messaging-framework-for-python" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id11">Messaging framework for Python</a><a class="headerlink" href="#messaging-framework-for-python" title="Permalink to this headline">¶</a></h2>
+<ul class="simple">
+<li><a class="reference external" href="http://kombu.readthedocs.org/en/latest/introduction.html">http://kombu.readthedocs.org/en/latest/introduction.html</a></li>
+</ul>
 <div class="highlight-python"><pre>The aim of Kombu is to make messaging in Python as easy as possible
 by providing an idiomatic high-level interface for the AMQ protocol,
 and also provide proven and tested solutions to common messaging problems.</pre>
 </div>
 </div>
 <div class="section" id="transport-native-virtual">
-<h2><a class="toc-backref" href="#id11">Transport (Native &amp; Virtual )</a><a class="headerlink" href="#transport-native-virtual" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id12">Transport (Native &amp; Virtual )</a><a class="headerlink" href="#transport-native-virtual" title="Permalink to this headline">¶</a></h2>
 <ul class="simple">
 <li><a class="reference external" href="http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison">http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison</a></li>
 </ul>
 <div class="section" id="native">
-<h3><a class="toc-backref" href="#id12">Native</a><a class="headerlink" href="#native" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id13">Native</a><a class="headerlink" href="#native" title="Permalink to this headline">¶</a></h3>
 <div class="section" id="ampqlib-sync">
 <h4>ampqlib(sync)<a class="headerlink" href="#ampqlib-sync" title="Permalink to this headline">¶</a></h4>
 <ul class="simple">
 </div>
 </div>
 <div class="section" id="virtual">
-<h3><a class="toc-backref" href="#id13">Virtual</a><a class="headerlink" href="#virtual" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id14">Virtual</a><a class="headerlink" href="#virtual" title="Permalink to this headline">¶</a></h3>
 <table border="1" class="docutils">
 <colgroup>
 <col width="23%" />
 </div>
 </div>
 <div class="section" id="id9">
-<h2><a class="toc-backref" href="#id14">作業分担</a><a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h2>
-<ul class="simple">
-<li><a class="reference external" href="http://kombu.readthedocs.org/en/latest/userguide/examples.html">http://kombu.readthedocs.org/en/latest/userguide/examples.html</a></li>
-</ul>
+<h2><a class="toc-backref" href="#id15">作業分担</a><a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="celery">
-<h3><a class="toc-backref" href="#id15">アプリケーション側 : Celery</a><a class="headerlink" href="#celery" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id16">アプリケーション側 : Celery</a><a class="headerlink" href="#celery" title="Permalink to this headline">¶</a></h3>
 </div>
 <div class="section" id="kombu">
-<h3><a class="toc-backref" href="#id16">メッセージイングブローカー側 : Kombu</a><a class="headerlink" href="#kombu" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/kombu-title-image.png" class="popup-image" id="popup-image" src="_images/kombu-title-image.png" />
+<h3><a class="toc-backref" href="#id17">メッセージイングブローカー側 : Kombu</a><a class="headerlink" href="#kombu" title="Permalink to this headline">¶</a></h3>
 </div>
+<div class="section" id="id10">
+<h3><a class="toc-backref" href="#id18">Kombu:タスクキューの例</a><a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
+<ul class="simple">
+<li><a class="reference external" href="http://bit.ly/kombu_task_queue">http://bit.ly/kombu_task_queue</a></li>
+</ul>
 </div>
 </div>
 </div>
 <div class="section" id="hdknr-hdknr">
 <h3><a class="reference external" href="mailto:+hdknr/&#37;&#52;&#48;hdknr">+hdknr/<span>&#64;</span>hdknr</a><a class="headerlink" href="#hdknr-hdknr" title="Permalink to this headline">¶</a></h3>
 <ul class="simple">
+<li><a class="reference external" href="http://gplus.to/hdknr">http://gplus.to/hdknr</a></li>
 <li><a class="reference external" href="https://twitter.com/hdknr">https://twitter.com/hdknr</a></li>
 </ul>
 </div>
 <h2><a class="toc-backref" href="#id11">生活低関心度商品プロモーション</a><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="id3">
 <h3><a class="toc-backref" href="#id12">デジタルサイネージ(っぽい) (2001年〜)</a><a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/vision.jpg" src="_images/vision.jpg" />
-</div>
-</div>
+<a  class="figure" id="card_fan_out" href="_static/me/vision.jpg">
+    <img src="_static/me/vision.jpg" width="300px" />
+</a></div>
 <div class="section" id="id4">
 <h3><a class="toc-backref" href="#id13">メールマーケティング(2000年〜)</a><a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
 </div>
 <h2><a class="toc-backref" href="#id15">デジタルアインデンティティ</a><a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="openid-connect-2008">
 <h3><a class="toc-backref" href="#id16">OpenID Connect (2008年〜)</a><a class="headerlink" href="#openid-connect-2008" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/OpenIDConnect-Map-v7.png" src="_images/OpenIDConnect-Map-v7.png" />
-<p class="caption">OpenID Connect Protocol
-( from <a class="reference external" href="http://openid.net/connect/">http://openid.net/connect/</a> )</p>
-</div>
-<ul class="simple">
+<a  class="figure" id="card_fan_out" href="_static/me/OpenIDConnect-Map-v7.png">
+    <img src="_static/me/OpenIDConnect-Map-v7.png" width="300px" />
+</a><ul class="simple">
 <li><a class="reference external" href="http://openid.net/wg/connect/">http://openid.net/wg/connect/</a></li>
 <li>#idcon 14th ~ BYOResume or DEAD! ~ ( <a class="reference external" href="http://idcon.doorkeeper.jp/events/1689">http://idcon.doorkeeper.jp/events/1689</a> )</li>
 </ul>

celery/monitor.html

 </div>
 <div class="section" id="django-celery-django-admin-ui">
 <h2><a class="toc-backref" href="#id8">django-celery : Django Admin UI</a><a class="headerlink" href="#django-celery-django-admin-ui" title="Permalink to this headline">¶</a></h2>
-<div class="figure">
-<img alt="_images/monitor_admin_taskstate_list.png" src="_images/monitor_admin_taskstate_list.png" />
-</div>
-<div class="section" id="djcelery-models-taskstate">
+<a  class="figure" id="periodic" href="_static/monitor/monitor_admin_taskstate_list.png"/>
+    <img src="_static/monitor/monitor_admin_taskstate_list.png"/>
+</a><div class="section" id="djcelery-models-taskstate">
 <h3><a class="toc-backref" href="#id9">djcelery.models.TaskState</a><a class="headerlink" href="#djcelery-models-taskstate" title="Permalink to this headline">¶</a></h3>
 <div class="highlight-python"><div class="highlight"><pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">from</span> <span class="nn">djcelery.models</span> <span class="kn">import</span>  <span class="n">TaskState</span>
 

celery/periodic.html

 <h1>定期実行<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h1>
 <div class="contents talks-contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#django-celerydjango-adimin" id="id4">django-celeryならDjango Adiminで簡単設定</a><ul>
-<li><a class="reference internal" href="#periodic" id="id5">Periodic : タスク</a></li>
-<li><a class="reference internal" href="#interval" id="id6">Interval : 毎秒/分/時</a></li>
-<li><a class="reference internal" href="#crontab-crontab" id="id7">Crontab : crontab時間指定</a></li>
-<li><a class="reference internal" href="#django-admin" id="id8">Django-Admin で変更すればスケジュール変わります</a></li>
-<li><a class="reference internal" href="#id2" id="id9">タスク名に日本語とか入れない事</a></li>
+<li><a class="reference internal" href="#django-celerydjango-adimin" id="id8">django-celeryならDjango Adiminで簡単設定</a><ul>
+<li><a class="reference internal" href="#periodic" id="id9">Periodic : タスク</a></li>
+<li><a class="reference internal" href="#interval" id="id10">Interval : 毎秒/分/時</a></li>
+<li><a class="reference internal" href="#crontab-crontab" id="id11">Crontab : crontab時間指定</a></li>
+<li><a class="reference internal" href="#django-admin" id="id12">Django-Admin で変更すればスケジュール変わります</a></li>
+<li><a class="reference internal" href="#id6" id="id13">タスク名に日本語とか入れない事</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#celery-beat" id="id10">celery beat が必要</a><ul>
-<li><a class="reference internal" href="#beat-worker" id="id11">&#8211;beat オプションで worker と同居可能</a></li>
-<li><a class="reference internal" href="#scheduler-djcelery-schedulers-databasescheduler" id="id12">&#8211;scheduler=djcelery.schedulers.DatabaseScheduler オプション</a></li>
+<li><a class="reference internal" href="#celery-beat" id="id14">celery beat が必要</a><ul>
+<li><a class="reference internal" href="#beat-worker" id="id15">&#8211;beat オプションで worker と同居可能</a></li>
+<li><a class="reference internal" href="#scheduler-djcelery-schedulers-databasescheduler" id="id16">&#8211;scheduler=djcelery.schedulers.DatabaseScheduler オプション</a></li>
 </ul>
 </li>
-<li><a class="reference internal" href="#s-schedulde" id="id13">-s/&#8211;schedulde : スケジュールファイル</a></li>
-<li><a class="reference internal" href="#id3" id="id14">アプリケーションからスケジュールファイルを動的に追加/変更する</a><ul>
-<li><a class="reference internal" href="#from-djcelery-import-periodictask-intervalschedule-crontabschedule" id="id15">from djcelery import PeriodicTask,IntervalSchedule,CrontabSchedule</a></li>
+<li><a class="reference internal" href="#s-schedulde" id="id17">-s/&#8211;schedulde : スケジュールファイル</a></li>
+<li><a class="reference internal" href="#id7" id="id18">アプリケーションからスケジュールファイルを動的に追加/変更する</a><ul>
+<li><a class="reference internal" href="#from-djcelery-import-periodictask-intervalschedule-crontabschedule" id="id19">from djcelery import PeriodicTask,IntervalSchedule,CrontabSchedule</a></li>
 </ul>
 </li>
 </ul>
 </div>
 <div class="section" id="django-celerydjango-adimin">
-<h2><a class="toc-backref" href="#id4">django-celeryならDjango Adiminで簡単設定</a><a class="headerlink" href="#django-celerydjango-adimin" title="Permalink to this headline">¶</a></h2>
+<h2><a class="toc-backref" href="#id8">django-celeryならDjango Adiminで簡単設定</a><a class="headerlink" href="#django-celerydjango-adimin" title="Permalink to this headline">¶</a></h2>
 <div class="section" id="periodic">
-<h3><a class="toc-backref" href="#id5">Periodic : タスク</a><a class="headerlink" href="#periodic" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/periodic_task.png" src="_images/periodic_task.png" />
-<p class="caption">タスクの設定</p>
-</div>
-<div class="figure">
-<img alt="_images/periodic_arguments.png" src="_images/periodic_arguments.png" />
-<p class="caption">タスクへの引数設定</p>
-</div>
-<div class="figure">
-<img alt="_images/periodic_options.png" src="_images/periodic_options.png" />
-<p class="caption">タスクの実行オプションの設定</p>
-</div>
+<h3><a class="toc-backref" href="#id9">Periodic : タスク</a><a class="headerlink" href="#periodic" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id2">
+<h4>タスクの設定<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h4>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_task.png"/>
+    <img src="_static/periodic/periodic_task.png"/>
+</a></div>
+<div class="section" id="id3">
+<h4>タスクへの引数設定<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h4>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_arguments.png"/>
+    <img src="_static/periodic/periodic_arguments.png"/>
+</a></div>
+<div class="section" id="id4">
+<h4>タスクの実行オプションの設定<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h4>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_options.png"/>
+    <img src="_static/periodic/periodic_options.png"/>
+</a></div>
 </div>
 <div class="section" id="interval">
-<h3><a class="toc-backref" href="#id6">Interval : 毎秒/分/時</a><a class="headerlink" href="#interval" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/periodic_interval.png" src="_images/periodic_interval.png" />
-</div>
-<div class="figure">
-<img alt="_images/periodic_result.png" src="_images/periodic_result.png" />
-<p class="caption">5分が長いので、1分に変更し、引数にメッセージも入れた。途中変更も反映。</p>
-</div>
+<h3><a class="toc-backref" href="#id10">Interval : 毎秒/分/時</a><a class="headerlink" href="#interval" title="Permalink to this headline">¶</a></h3>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_interval.png"/>
+    <img src="_static/periodic/periodic_interval.png"/>
+</a><div class="section" id="id5">
+<h4>5分が長いので、1分に変更し、引数にメッセージも入れた。途中変更も反映。<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h4>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_result.png"/>
+    <img src="_static/periodic/periodic_result.png"/>
+</a></div>
 </div>
 <div class="section" id="crontab-crontab">
-<h3><a class="toc-backref" href="#id7">Crontab : crontab時間指定</a><a class="headerlink" href="#crontab-crontab" title="Permalink to this headline">¶</a></h3>
-<div class="figure">
-<img alt="_images/periodic_crontab.png" src="_images/periodic_crontab.png" />
-</div>
-<div class="figure">
-<img alt="_images/periodic_crontab_task.png" src="_images/periodic_crontab_task.png" />
-<p class="caption">IntervalかCrontabかはどちらか一方でのみ指定</p>
-</div>
-<div class="figure">
-<img alt="_images/periodic_crontab_result.png" src="_images/periodic_crontab_result.png" />
-</div>
+<h3><a class="toc-backref" href="#id11">Crontab : crontab時間指定</a><a class="headerlink" href="#crontab-crontab" title="Permalink to this headline">¶</a></h3>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_crontab.png"/>
+    <img src="_static/periodic/periodic_crontab.png"/>
+</a><div class="section" id="intervalcrontab">
+<h4>IntervalかCrontabかはどちらか一方でのみ指定<a class="headerlink" href="#intervalcrontab" title="Permalink to this headline">¶</a></h4>
+<a  class="figure" id="periodic" href="_static/periodic/periodic_crontab_task.png"/>
+    <img src="_static/periodic/periodic_crontab_task.png"/>
+</a><a  class="figure" id="periodic" href="_static/periodic/periodic_crontab_result.png"/>
+    <img src="_static/periodic/periodic_crontab_result.png"/>
+</a></div>
 </div>
 <div class="section" id="django-admin">
-<h3><a class="toc-backref" href="#id8">Django-Admin で変更すればスケジュール変わります</a><a class="headerlink" href="#django-admin" title="Permalink to this headline">¶</a></h3>
+<h3><a class="toc-backref" href="#id12">Django-Admin で変更すればスケジュール変わります</a><a class="headerlink" href="#django-admin" title="Permalink to this headline">¶</a></h3>
 </div>
-<div class="section" id="id2">
-<h3><a class="toc-backref" href="#id9">タスク名に日本語とか入れない事</a><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="id6">
+<h3><a class="toc-backref" href="#id13">タスク名に日本語とか入れない事</a><a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
 <div class="highlight-python"><pre>[2012-09-04 04:23:16,324: WARNING/Beat]
 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 13: ordinal not in range(128)</pre>
 </div>
 </div>
 </div>
 <div class="section" id="celery-beat">