我正在使用Flask开发网站,在开发过程中,我使用以下文件运行烧瓶:
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print '################### Restarting @', datetime.utcnow(), '###################'
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)
当我启动服务器时,或者由于文件已更新而自动重启时,它始终显示两次打印行:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
Run Code Online (Sandbox Code Playgroud)
虽然这不是一个真正的问题(其余部分按预期工作),但我只是想知道它为什么会这样?有任何想法吗?
我在烧瓶应用程序中使用apscheduler时遇到问题.
在我的view.py文件中,我写的是这样的
import time
from apscheduler.scheduler import Scheduler
def test_scheduler():
print "TEST"
print time.time()
sched = Scheduler()
sched.add_interval_job(test_scheduler, seconds=5)
sched.start()
Run Code Online (Sandbox Code Playgroud)
然后这个方法test_scheduler()每五秒执行两次
测试1360844314.01测试1360844314.2
我一直在使用Flask为我的k8055 USB接口板提供一个简单的Web API ; 相当标准的吸气剂和推杆,Flask真的让我的生活变得更轻松.
但我希望能够在乳清发生时将状态变化记录为/接近.
例如,如果我有一个连接到电路板的按钮,我可以轮询该特定端口的api.但如果我想让输出直接反映输出,无论是否有人在与api交谈,我都会有这样的事情.
while True:
board.read()
board.digital_outputs = board.digital_inputs
board.read()
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
每一秒,输出都会更新以匹配输入.
在Flask下有没有办法做这种事情?我之前在Twisted中做过类似的事情,但Flask对于这个特定的应用程序来说太方便了,只是放弃它...
谢谢.
我需要在Flask应用程序上定期运行某个任务.我决定使用一个简单的库 - Schedule(https://github.com/dbader/schedule)来做这件事.我在主应用程序线程的单独线程上运行任务调度程序.这是相关的代码段.
import schedule
import time
from flask import Flask, request
from threading import Thread
app = Flask(__name__)
start_time = time.time()
def run_every_10_seconds():
print("Running periodic task!")
print "Elapsed time: " + str(time.time() - start_time)
def run_schedule():
while 1:
schedule.run_pending()
time.sleep(1)
@app.route('/', methods=['GET'])
def index():
return '<html>test</html>'
if __name__ == '__main__':
schedule.every(10).seconds.do(run_every_10_seconds)
t = Thread(target=run_schedule)
t.start()
print "Start time: " + str(start_time)
app.run(debug=True, host='0.0.0.0', port=5000)
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我想要'运行定期任务!' 每10秒打印一次.但是,这是我得到的输出.
* Running on http://0.0.0.0:5000/
* Restarting with reloader
Start time: 1417002869.99 …Run Code Online (Sandbox Code Playgroud) 我已经能够创建在此链接的每个请求中创建的对象:http://flask.pocoo.org/docs/appcontext/#locality-of-the-context.
我实际上是在创建一个基于http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful的API .
我希望能够加载一次对象并让它返回一个已处理的响应,而不是在每次请求时加载它.该对象不是数据库,只需要取消大文件的取消.
我查看了文档,但我仍然对这整个Flask两个状态感到困惑.
我正在运行一个 Flask 应用程序,它基本上是从 Twitter 中提取推文。虽然使用嵌入式 Flask 服务器运行应用程序没有任何问题,但在 gUnicorn 中运行时,我收到重复的推文,主要是因为我有 2 个线程接收来自 Twitter 的回调。
例如,如果我使用
蟒蛇应用程序.py
当收到推文时,我得到了这个预期的输出,看到我在记录器输出中附加了线程信息(第一个参数):
140721974449920 2015-03-12 17:59:13,030 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
140721974449920 2015-03-12 17:59:14,646 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
140721974449920 2015-03-12 17:59:49,031 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
Run Code Online (Sandbox Code Playgroud)
如您所见,时间戳看起来也有效,检查我存储它的 mongo 集合,我看到文档没问题。然后,如果我使用 gunicorn 启动应用程序:
gunicorn app:app -b localhost:8000 --debug
Run Code Online (Sandbox Code Playgroud)
然后检查日志,我可以看到 2 个不同的线程正在获取数据:
139883969844992 2015-03-12 17:52:05,104 INFO: Got message from streaming Twitter API! [in /home/mosquito/git/opencoast_streamer/app.py:83]
139883961452288 2015-03-12 17:52:05,106 …Run Code Online (Sandbox Code Playgroud) 将参数传递给 apscheduler 处理函数 这对我来说不起作用,我尝试了不同的语法变体(见下文)。我可能会遗漏一些更基本的东西。
@app.route("/tick", methods=['GET', 'POST'])
def tick(datetimes, texti):
flash('DO! Sir, you have planned on the {} this:'.format(datetimes), 'success')
flash(texti, 'info')
return redirect(url_for('td_list'))
def Schedule_reminders():
with app.test_request_context():
if os.environ.get("WERKZEUG_RUN_MAIN") == "true":
# /sf/ask/661437101/
scheduler = BackgroundScheduler()
tds = Td.query.all()
for td in tds:
run_date = td.date +' '+ td.time +':00'
# /sf/ask/868889591/#39027779
datetimes = run_date
texti = td.text
#scheduler.add_job(tick, 'date', [datetimes, texti], run_date)
# ValueError: dictionary update sequence element #0 has length 1; 2 is required
#scheduler.add_job(lambda: tick(datetimes, texti), …Run Code Online (Sandbox Code Playgroud) 我正在Python / Flask中实现GUI。设计烧瓶的方式中,必须“手动”打开本地主机以及端口号。
有没有一种方法可以使它自动化,以便在运行代码时自动打开浏览器(本地主机)?
我尝试使用webbrowser软件包,但在会话被杀死后会打开网页。
我还查看了以下帖子,但它们让我头疼。
当基于用户输入呈现html页面时,会发生问题。
提前致谢。
import webbrowser
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
webbrowser.open_new('http://127.0.0.1:2000/')
app.run(port=2000)
Run Code Online (Sandbox Code Playgroud) 我有一个正在运行 Flask 的 python 程序。我注意到一个奇怪的事情,看起来该程序运行了两次,这是我不希望的。
这是启动程序的文件(runserver.py,位于根文件夹/):
from myapp import app
if __name__ == "__main__":
print "woho"
app.run(host='0.0.0.0',debug=True)
Run Code Online (Sandbox Code Playgroud)
运行这个程序时,我可以在终端中看到两个“woho”,表明有些事情很奇怪。
在文件夹 /myapp 中我有 __init__.py:
from flask import Flask
app = Flask(__name__)
import myapp.views
Run Code Online (Sandbox Code Playgroud)
然后在我的views.py(也在/myapp中)我有所有的视图,例如:
from myapp import app
from flask import render_template
@app.route('/')
def index():
return render_template('index.html')
Run Code Online (Sandbox Code Playgroud) flask ×9
python ×9
apscheduler ×2
api ×1
args ×1
gunicorn ×1
localhost ×1
task ×1
web-services ×1
wsgi ×1