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

如何独立于主程序流触发python方法?,python,flask,Python,Flask,我正在使用python构建一个接口,它从一个收集器表->移交到一个公共接口表->转换-/code>并触发到一个外部系统。我还使用轮询器将状态更新回接口表和收集器表 @synch.route("/ssr_synch", methods=['GET', 'POST']) def callSSRSynch(): batch_txn_id = request.args.get('batch_txn_id') if request.method == 'POST': bat

我正在使用python构建一个接口,它从一个收集器表->移交到一个公共接口
表->转换-/code>并触发到一个外部系统。我还使用轮询器将状态更新回接口表和收集器表

@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框架的应用程序是您的入口点,客户机可以在这里运行新任务或获取有关当前正在运行或已经完成的任务的信息。在任务完成之前,此应用程序不应运行任务本身或阻止客户端连接!例如,有很多专门为这个用例创建的好工具

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()

也许你可以用芹菜之类的东西?穿线似乎是最简单的方法。设法使这项工作正常:
threads=list()thread1=threading.Thread(target=ssr\u collector.main,args=(batch\u txn\u id,))thread2=threading.Thread(target=ssr\u provisioning.main)thread3=threading.Thread(target=ssr\u poller.main)threads.append(thread1)threads.append(thread2)thread2)threads.append(thread3)for t in threads:t.start()对于t-in线程:t.join()
gah!如何在注释中输入
code
:别回答了,这样更干净