python - 如何独立于主程序流程触发python方法?

标签 python flask

我正在使用 python 构建一个接口(interface),该接口(interface)从收集器表 -> 移交给通用接口(interface)表 -> 转换 并触发到外部系统。我还有轮询器将状态更新回接口(interface)表和收集器表。

@synch.route("/ssr_synch", methods=['GET', 'POST'])
def callSSRSynch():
    batch_txn_id = request.args.get('batch_txn_id')
    if request.method == 'POST':
        batch_txn_id = request.form['batch_txn_id']
        if request.form['synch'] == 'synch':
            if app.config['stub'] == 'False':
                ssr_collector.main()
                ssr_provisioning.main() #for interface table
                ssr_poller.main()
            form = "Synch completed for batch transaction id %s" % (batch_txn_id,)

目前,在请求触发调用后,收集器和配置在轮询器之前运行。我希望轮询器独立于收集器和配置启动。

不确定线程​​是否是最好的方法或者是否有更简单的解决方案?

2015 年 12 月 9 日更新:

线程似乎是最简单的方法。设法完成这项工作:

threads = list() 
thread1 = threading.Thread(target=ssr_collector.main, args=(batch_txn_id,))
thread2 = threading.Thread(target=ssr_provisioning.main) 
thread3 = threading.Thread(target=ssr_poller.main) 
threads.append(thread1) 
threads.append(thread2) 
threads.append(thread3) 
for t in threads: t.start() 
for t in threads: t.join()

最佳答案

我认为你走错了方向。您应该将不同的功能分离到不同的应用程序。基于 Flask 框架的应用程序是您的入口点,客户端可以在其中运行新任务或获取有关当前正在运行或已完成的任务的信息。在任务完成之前,该应用程序不应运行任务本身或阻止客户端连接!有很多专门为此用例创建的好工具,Celery例如。

API方法:

@synch.route("/ssr_synch", methods=['POST'])
def callSSRSynch():
    batch_txn_id = request.args.get('batch_txn_id')
    if request.method == 'POST':
        batch_txn_id = request.form['batch_txn_id']
        if request.form['synch'] == 'synch':
            if app.config['stub'] == 'False':
                collector.delay()
                provisioning.delay()
                poller.delay()         

            form = "Synching for batch transaction id %s" % (batch_txn_id,)

任务:

@celery.task
def collector():
    ssr_collector.main()

@celery.task
def provisioning():
    ssr_provisioning.main()

@celery.task
def poller():
    ssr_poller.main()

关于python - 如何独立于主程序流程触发python方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34152247/

相关文章:

python - axhline 影响绘图轴

Python - pandas - 皮秒精度的时间序列数据

sql - Flask-Admin 用户每行读/写设置

python - 不覆盖处理程序的路由层次结构

python - 评论中出现意外标记 '<newline>'

python - 重命名重复对象失败

python - PySpark 窗口函数理解

python - 如何在 Python 中对装饰器进行分组

python - pandas - 根据重复项创建新列

python - flask : 'User' object has no attribute 'is_active'