我想構建一個 Flask 應用程式,它從某個電子郵件地址讀取電子郵件并在路由上顯示這些電子郵件。在這里,我想要一個后臺任務來獲取所有電子郵件并將它們寫入資料庫,我希望它在后臺連續運行我不想在有人請求路由時運行此任務。獲取電子郵件和顯示它們應該是完全獨立的。我認為多處理應該有效,但我不知道如何啟動兩個單獨的行程,一個用于獲取電子郵件并將它們寫入資料庫,另一個用于顯示來自資料庫的電子郵件的燒瓶應用程式是否可以這樣做?請幫助我給我一個多處理演示,其中一個行程在后臺運行,寫入資料庫,另一個行程是燒瓶應用程式,示例可以是任何不需要獲取電子郵件的任何寫入資料庫的內容從同一資料庫讀取的另一個行程上的單獨行程和燒瓶。
感謝您閱讀這么長時間。非常感謝。
uj5u.com熱心網友回復:
最近遇到這個問題,最好的做法是https://apscheduler.readthedocs.io/en/3.x/index.html。
您可以創建調度程式以在任何時間間隔運行任何函式或使用 crontab 表示法。只需確保在 app.run() 之前創建調度程式
例如
def print_hello():
print("hello")
scheduler = BackgroundScheduler() # Create Scheduler
retrain_scheduler.add_job(print_hello, "interval", seconds = 5) # Add job to scheduler
retrain_scheduler.start() # Start Scheduler
app.run()
這將每 5 秒運行一次該函式。
uj5u.com熱心網友回復:
@sam-rees
from flask import jsonify
import multiprocessing
from flask import Flask
import sqlite3
app = Flask(__name__)
app.config['SECRET_KEY'] = ''
def connect_db():
sql = sqlite3.connect('data.db')
sql.row_factory = sqlite3.Row
return sql
def get_db():
return connect_db()
def task():
db = get_db()
l = (i for i in range(90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000))
for i in l:
number = i
print(number)
db.execute('insert into test (number) values (?)',
[number])
db.commit()
db.close()
@app.route('/')
def index():
db = get_db()
cur = db.execute('select number from test')
rows = cur.fetchall()
data = []
for row in rows:
data.append([x for x in row]) # or simply data.append(list(row))
return jsonify(data)
def run_app():
app.run()
if __name__ == '__main__':
p1 = multiprocessing.Process(target=task)
p2 = multiprocessing.Process(target=run_app)
p1.start()
p2.start()
p1.join()
p2.join()
這樣做有錯嗎?否則我會遇到問題?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380073.html
