gpt4 book ai didi

python - 如何在 flask View 函数中进行并行执行

转载 作者:行者123 更新时间:2023-11-28 19:14:12 24 4
gpt4 key购买 nike

在我的 python-flask web 应用程序运行在端口 5001 中,我有一个场景来创建一个端点,所有其他端点 View 函数需要并行执行并遵循通过聚合所有单独的响应以在相同的请求生命周期中返回它。

例如,flask 应用中的routes 包含以下view 函数

@app.route(/amazon)
def amazon():
return "amazon"

@app.route(/flipkart)
def flipkart():
return "flipkart"

@app.route(/snapdeal)
def sd():
return "snapdeal"

注意:在上述三个端点中,涉及大量的network io

我正在创建另一个端点,即使在这里,所有其他端点实现也必须一起调用。

### This is my endpoint
@app.route(/all)
def do_all():
# execute all amazon, flipkart, snapdeal implementations

对于上述情况,我建议采用两种方法。

方法 1(多处理方法):

将工作任务编写为单独的函数,通过 python-multiprocessing 调用每个调用者模块并收集响应

def do_all():
def worker(name):
# doing network io task for the given source name
pass

for name in ['amazon', 'flipkart', 'snapdeal']:
p = multiprocessing.Process(target=worker, args=(name,))
jobs.append(p)
p.start()

# Terminating all the process explicitly, Since freezing after execution complete
for j in jobs:
j.terminate()

return 200

在这里,我调用每个子进程,调用 worker,最后所有子进程都明确终止,因为我认为它也是 wsgi 线程

方法 2(grequests):

使用 python-grequests 显式调用每个端点.因此,驻留在同一应用程序中的每个端点将被并行调用,并收集响应

def do_all():
grequests.post("http://localhost:5001/amazon", data={})
grequests.post("http://localhost:5001/flipkart", data={})
grequests.post("http://localhost:5001/snapdeal", data={})

这将通过每个 wsgi 线程 执行,每个请求都会生成,这里我不知道生成多个进程并且在执行后不会终止?

两者可能相似,但哪一个可以无缝实现,如果有任何替代方法来解决这种情况,请帮助我?为什么?

最佳答案

也许您可以使用另一种方法简化它:

  1. 向用户返回即时响应

    def do_all():
    返回“亚马逊,...正在处理”

  2. 在后台调用所有相关方法。
  3. 让调用的后台方法发送signals

    从 blinker import 命名空间
    背景=命名空间()
    amazon_finished = background.signal('amazon-finished')
    def amazon_bg():
    amazon_finished.send(**有趣)

  4. 订阅后台 worker 的信号。

    def do_all():
    amazon_finished.connect(amazon_logic)

  5. 向用户展示后台 worker 的返回值。这将是一个新请求(可能在同一路由中)。

    def amazon_logic(sender, **extra):
    发件人

优点是用户对每个请求都立即响应后台工作人员的状态,错误处理会容易得多。

我没有测试过,所以你应该自己查找 blinker API。

关于python - 如何在 flask View 函数中进行并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35625964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com