0

fire_and_forget 機能を実現しようとしていますが、詳細は次のとおりです。

私が使用しようとしている非同期デコレータ:

import asyncio
import time


def fire_and_forget(f):
    def wrapped(*args, **kwargs):
        return asyncio.get_event_loop().run_in_executor(None, f, *args, *kwargs)

    return wrapped

上記のデコレータを使用した非同期呼び出し:

@fire_and_forget
def call_async(self, req, body, headers_params):
    logger.info("Calling ASYNC")
    try:
        f = urllib.request.urlopen(req)
        response = f.read()
        f.close()
    except Exception as e:
        logger.exception("api exception %s" % e)
        return None

    # Parse and return the response
    try:
        res = self._parse_response(response)
    except Exception as e:
        logger.exception("Exception in parsing response of %s" % e)
        res = None
    logger.debug("clevertap response: {}".format(res))
    

test_xyz を呼び出す私の Flask アプリは、上記の発火を引き起こし、call_async を忘れます。

from flask import Flask, jsonify, request
from call_xyz import test_xyz

app = Flask(__name__)

@app.route('/events_dm')
def events_dm():
    session_id = request.args.get('sessionId', "11111111")
    test_obj = test_xyz(session_id)
    test_obj.track_test()
    return jsonify({"success": True})


app.run(
            host='0.0.0.0',
            port=8091,
            debug=True,
            threaded=True
        )

エラーが発生しないように、イベント ループを正しく設定する場所を理解できません。

4

2 に答える 2