簡體   English   中英

是否可以在 flask 服務器中創建多線程?

[英]Is it possible to create muti thread in a flask server?

我正在使用flask並且flask-restx嘗試創建一個協議以從另一個服務獲取特定的字符串。 我試圖找出一種在不同線程的服務器中運行 function 的方法。 這是我的代碼示例:

from flask_restx import Api,fields,Resource
from flask import Flask
app = Flask(__name__)
api = Api(app)

parent = api.model('Parent', {
    'name': fields.String(get_answer(a,b)),
    'class': fields.String(discriminator=True)
})
@api.route('/language')
class Language(Resource):
    # @api.marshal_with(data_stream_request)
    @api.marshal_with(parent)
    @api.response(403, "Unauthorized")
    def get(self):

        return {"happy": "good"}

我期望的是:

在客戶端,首先服務器應該運行,即我們應該能夠使curl -i localhost:8080工作。 然后當特定條件為真時,客戶端應該收到一個 GET 請求,其中包含我在服務器中的父數據 JSON。 但是,如果該條件為真,則 GET 請求應該無法返回正確的結果。

我做了什么:

我使用的方法之一是將裝飾器和Class Language(Resource)部分包裝在不同的 function 中,並將 function 錯誤地包裝在不同的線程中,並將該線程置於條件檢查之下。 不確定這是否是正確的做法。我看到有人說celery可能是一個不錯的選擇,但不確定這是否可以在flask-restx工作。

我有答案給你。 要使用 flask 在后台運行一個進程,請使用 APScheduler 安排它使用另一個進程運行。 一個非常簡單的 package,它可以幫助您安排任務以每隔一段時間運行函數,在您的例子中是在 utcnow() 一次。

這是Flask-APScheduler的鏈接。

job = scheduler.add_job(myfunc, 'interval', minutes=2)

在您的情況下使用“日期”而不是“間隔”並指定 run_date

job = scheduler.add_job(myfunc, 'date', run_date=datetime.utcnow())

您可以將 arguments 發送到 function:

job = scheduler.add_job(myfunc, 'date', args = (your args), run_date=datetime.utcnow())

這是文檔:用戶指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM