首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在后台执行python脚本,同时返回对话框响应(Python )

在后台执行python脚本,同时返回对话框响应(Python )
EN

Stack Overflow用户
提问于 2020-05-07 08:01:23
回答 2查看 289关注 0票数 0
代码语言:javascript
运行
复制
app = Flask(__name__)
av=""
time=""
action=""

def again():
    ...

@app.route('/')
def index():
    return 'Hello World!'

def results():
    global action
    req = request.get_json(force=True)
    action = req.get('queryResult').get('action')
    if(action=="get_address"):
        global av
        global time
        av=req.get('queryResult').get('parameters').get('location').get('city')
        threade=threading.Thread(target=again())
        threade.start()

        textv="Thanks! Please enter your name now."
        return {'fulfillmentText': textv}
    else:
        textv="Time: " + time
        return {'fulfillmentText': textv}


# create a route for webhook
@app.route('/webhook', methods=['GET', 'POST'])
def webhook():
    # return response
    return make_response(jsonify(results()))

# run the app
if __name__ == '__main__':
   app.run()

这是python脚本,用于我的对话框代理后端。代理具有以下会话结构:

嗨->请输入地址->请输入名称(以浪费时间)->and,然后它给出旅行时间

因此,这个代理基本上给出了输入的地址和固定地址之间的旅行时间(使用again()中的脚本),同时注意,如果我直接尝试在地址之后输出旅行时间,对话框代理说,超出了截止日期。因此,为了克服这个问题,我尝试了线程处理,以便在后台计算行程时间,同时将响应返回到对话框,询问用户名,然后输出行程时间。

但问题是,DialogFlow仍然表示超过了截止日期(在“请输入您的地址”)。我怀疑原因是,即使python脚本返回web钩子,但是直到python脚本停止执行时,对话框流才会显示输出。那我该怎么克服呢?

总之,我希望返回请求(get_address操作),同时计算旅行时间(使用again()),并在下一个请求中返回。

因此,按照的建议,results()函数的if()部分中删除了return {'fulfillmentText': textv},并将其替换为return {'followupEventInput': 'IN_PROGRESS'},但它仍然写着DEADLINE_EXCEEDED。正如我前面所说的,问题似乎在于results()函数根本没有返回。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-07 18:35:02

我自己就猜到了。问题在于:threade=threading.Thread(target=again())的语法

()之后不应该有again

票数 3
EN

Stack Overflow用户

发布于 2020-05-07 16:22:28

您面临的问题是,您的计算任务可能需要超过4秒的最大等待时间DialogFlow之间的问题和答案。

事实上,一个基本的解决办法是在某个时候买东西,问其他问题。

在下面的交互过程中,您需要检查后台线程是否已经完成,然后获取时间。否则,您需要扩展此过程。

一种稍微好一些的方法是触发事件(而不是提问):

进入address

  • webhook被调用

  • 启动后台线程,睡眠3秒,触发事件IN_PROGRESS

  • DialogFlow意图I1由事件IN_PROGRESS触发,消息显示给用户(即处理它)

  • web钩子后被调用,休眠3秒,然后检查后台线程状态
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61652734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档