這是我發布的第一個問題;我是一名新程式員,正在嘗試使用 Flask、Jinja 和 Python 為朋友制作一個有趣的測驗應用程式。在測驗中,您每天都會獲得 6 條不同的線索,這些線索將您指向一個特定的答案(不是多項選擇,一個特定的答案)。我有一個包含所有答案的串列,我目前正在嘗試獲取串列中的下一個專案......但我遇到的問題是我希望每 24 小時按計劃進行一次。這是困難的部分:我可以很好地列印串列中的下一項,但我不知道如何在特定時間間隔自動列印下一項。一旦我有了它,我想我會一路走好!(我真的很想用 Python 而不是 JavaScript 來做這件事,因為我對 JavaScript 的了解甚至比 Python 還少)。
這是我嘗試過的幾件事:
import schedule
from schedule import every, repeat
import time
answers = ["answer1", "answer2", "answer3"]
@repeat(every(3).seconds)
def fetch():
global answers
answers = 0
print(answers)
while 1:
schedule.run_pending()
time.sleep(1)
這將回傳錯誤:“int”物件不可迭代。
我也試過:
import schedule
import time
def job():
answers = ["answer1", "answer2", "answer3"]
for answer in answers:
print(answer[0:])
schedule.every(10).seconds.do(job)
while 1:
schedule.run_pending()
time.sleep(1)
這只是一次列印所有書籍;不是我想要的,我想要一個不同的間隔(這里是 10 秒,但實際上是 24 小時)。
我嘗試的另一件事:
import schedule
import time
def job():
answers = ["answer1", "answer2", "answer3"]
answersIterator = iter(answers)
print(next(answersIterator))
schedule.every(10).seconds.do(job)
while 1:
schedule.run_pending()
time.sleep(1)
這只是重復列印串列中的第一項;我希望它以特定的時間間隔通過串列,但不是一次全部。
我已經閱讀了盡可能多的教程,但是因為我是新手,所以我很掙扎。如果這里有格式問題,我們深表歉意;我在發布之前通讀了指導,但是第一次等等等等。謝謝大家!
uj5u.com熱心網友回復:
考慮在哪里定義變數以及它們在哪個區域有效。由于這個原因,在最后的嘗試中,迭代器不保持它們的狀態。每次呼叫函式時都會重新創建它們,并在退出函式時再次消失。
以下示例定義了一個在序列末尾重新開始的全域迭代器。它的狀態被保留,因為它沒有在函式的本地范圍內定義。在您重復呼叫的函式中,您現在可以使用 定期查詢下一個元素next(iterator)。
from itertools import cycle
from schedule import every, repeat, run_pending
import time
iter_answers = cycle(["answer1", "answer2", "answer3"])
@repeat(every(10).seconds)
def job():
print(next(iter_answers))
while True:
run_pending()
time.sleep(1)
但是,我不明白你想如何在 Flask 中使用代碼。
如果我理解正確,客戶端應該要求一個答案,該答案由服務器每隔一段時間更新和提供。因此,您應該考慮如何撰寫與時間戳匹配的端點,并根據該端點使用序列中的下一個元素。所以可能是這樣的。
from flask import Flask
from datetime import datetime
class Provider:
def __init__(self, items):
self._i = 0
self._t = datetime.now()
self.items = items
def next(self):
if (datetime.now() - self._t).total_seconds() >= 10:
self._i = (self._i 1) % len(self.items)
self._t = datetime.now()
return self.items[self._i]
provider = Provider([
'answer1',
'answer2',
'answer3',
])
app = Flask(__name__)
@app.route('/')
def index():
return provider.next()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520051.html
標籤:Python烧瓶
