2016-10-07 22 views
1

処理する必要のあるスラッシュスラッシュコマンドを実装したい場合は、処理に約30秒かかっているfuchntion pipelineを処理する必要があります。 Slack以降、スラッシュコマンドは3秒間しか応答できません。これを実装するにはどうすればいいですか。私はthisを参照しましたが、それを実装する方法はありません。遅延スラックスラッシュ応答を実装する

私を抱きしめてください。私はこれを初めてやっています。 これは私が試みたものです。私は3秒以内にok statusで応答する方法を知っているが、私はthis記事に出くわしたpipeline

import requests 
import json 
from bottle import route, run, request 
from S3_download import s3_download 
from index import main_func 

@route('/action') 
def action(): 
     pipeline() 
     return "ok" 

def pipeline(): 
     s3_download() 
     p = main_func() 
     print (p) 

if __name__ == "__main__": 
     run(host='0.0.0.0', port=8082, debug=True) 

再び呼び出す方法を理解していません。唯一の解決策はAWSラムダを使用していますか? これをpythonで完全に行うことはできませんか?あなたは差分スタンドアロンPythonで多分この第二のプロセスを実行することができます

sqs_queue = get_sqs_connection(queue_name) 
for sqs_msg in sqs_queue.get_messages(10, wait_time_seconds=5): 
    processed_msg = json.loads(sqs_msg.get_body()) 
    response = pipeline(processed_msg) 
    if response: 
     sqs_queue.delete_message(sqs_msg) 

from boto import sqs 
@route('/action', method='POST') 
def action(): 
    #retrieving all the required request example 
    params = request.forms.get('response_url') 

    sqs_queue = get_sqs_connection(queue_name) 
    message_object = sqs.message.Message() 
    message_object.set_body(params) 
    mail_queue.write(message_object) 
    return "request under process" 

とキューを処理し、別のプロセスを持っており、長期の機能を実行する呼び出すことができます。このような

+0

キューを試しましたか?取得リクエストでは、リクエストパラメータを取得してキューに格納することができ、ワーカープロセスはキューを処理し、応答を期待して元に戻すことができます。そうでない場合は、ボトルの代わりに竜巻を使用するような非ブロックリクエストフレームワークを試してみてください。 – Sirius

+0

スニペットや擬似コードで説明できますか?あなたの最初のアプローチ – Guru

答えて

2

何かファイル、デーモンプロセスまたはcronとして。

ここでは、平方キロメートルAmazon Queueを使用していますが、使用できるオプションは異なります。

0

1つのプロセスでこれを実行するためのオプションが2つありますが、それは危険に満ちています。長いプロセスを処理するために新しいThreadをスピンアップすると、途中でデプロイまたはクラッシュして失われる可能性があります。

耐久性が重要な場合は、SQS、Lambda、またはRedisでバックアップされたCeleryタスクキューなどのバックグラウンドタスクワーカーを調べてください。別のタスクにはいくつかの面白い障害モードがあり、これらのツールはスレッドを生成するだけでなく、これらのツールを使用して対処するのに役立ちます。

関連する問題