我能做些什么来使用flask应用程序中的戏剧性



遵循本教程https://github.com/Bogdanp/dramatiq我创建了一个简单的python脚本来检查它是否有效。我做了一些简单的操作如下

它确实运行良好。

请注意,有两个终端,一个用于运行脚本,一个用于worker。在下面给出的脚本中,count_word函数中的print语句在第二个终端中执行

working example
import pandas as pd
import dramatiq
import requests
import sys
@dramatiq.actor
def count_words(url):
response = requests.get(url)
count = len(response.text.split(" "))

data = {'Name': ['Tom', 'nick', 'krish', 'jack'],
'Age': [20, 21, 19, 18]}
df = pd.DataFrame(data)
df.to_csv(r'C:Users91956Desktopasdf.csv')
print(df)
print(f"There are {count} words at {url!r}.")

if __name__ == "__main__":
count_words.send("http://whatsapp.com")

所以我继续尝试在我的flask应用程序中做同样的事情,我希望process_data中的打印语句会在工人终端中打印出来,但它根本没有打印出来,仅";嗨,我在上班";在我运行烧瓶应用的终端中打印

@app.route('/work')
def work():
print("hi i am in work")    

@dramatiq.actor
def process_data():
print('hi i am in process_data')

process_data.send()

return "hello"

我想在后台运行process_ data函数,我是一个初学者,知道的不多,有可能以我现在的方式实现吗?

所以我想知道如何在烧瓶的后台运行特定的函数?

process_data.send()执行时,它会将消息排入您的broker中,然后返回以继续执行您的函数。由于您的函数会立即返回一个响应体,因此该HTTP请求会立即完成——可能在process_data开始或完成执行之前。

对此你能做些什么?首先,接受异步或并发处理就是这样。然后,了解检索延迟或异步进程结果的各种策略。

  1. 轮询:通过发出查询结果的HTTP请求,定期轮询服务器,直到结果可用并可检索

  2. 在客户端和服务器之间建立一个websocket,用于接收请求和发送结果。这可能是最简单的解决方案,不需要客户端轮询服务器,尽管初始编码并不重要,但也有好的例子。例如,请参阅Quart项目,这是一个实现更好的websocket服务器解决方案的Flask fork:https://quart.palletsprojects.com/en/latest/

  3. 使用服务器";"推";机制,其中process_data尝试在完成时发送结果,可能通过客户端综合查询,该查询返回任何进程完成结果的短通知,或者返回结果本身

  4. 使用一个自动将服务器过程结果传递给客户端的框架(例如RPC框架可以做到这一点,也许React Redux可以做到?(

  5. 实现观察者模式的框架,其中在服务器上的进程完成后调用客户端回调函数。Spring Boot将其作为客户端-服务器观察者模式浏览器提供,但不确定Python有什么可用的。

我会实现选项#1或#2,因为它们是最简单的。您可以在Pypi周围查找许多RPC框架,这些框架确实可以作为回调进行往返调用,但我还没有找到一个可以为浏览器客户端进行往返调用的框架。我已经构建了这样一个客户端-服务器RPC框架,它在基于Quart的websocket应用服务器和EcmaScript浏览器客户端之间的websocket上运行。总有一天我会发布它。

相关内容

  • 没有找到相关文章

最新更新