尝试从控制台使用uwsgi记录python打印内容时遇到问题。
因此,我使用以下命令从控制台运行应用程序:
uwsgi --http :9090 --wsgi-file wsgi.py --master -p 4
我的wsgy.py文件包含:
from assets_generator import app as application
if __name__ == "__main__":
app.run()
我的应用程序看起来像这样(在asset_generator.py内部):
from flask import Flask, render_template
app = Flask(__name__)
app.config.from_envvar('CONFIG')
from uwsgidecorators import thread
from worker import Worker
@thread
def _start_worker(item):
worker = Worker(item=item)
worker.run()
@app.route("/post-asset", methods=['GET', 'POST'])
def post_asset():
from flask import request
_start_worker(request.values)
return "OK", 200
工人的运行类调用一个convert方法:
class Worker(object):
def __init__(self, item):
super(Worker, self).__init__()
self.item = item
def run(self):
with app.app_context():
# prepare stuff for convertion, fill urls etc....
details = self.convert(
name=self.item.get('name'),
source_url=self.item.get('source_url'),
conversion_format=self.item.get('format'),
default_options=default_options
)
和convert方法调用一个URL:
def convert(self, name, source_url, conversion_format, default_options):
try:
print "before requests " + source_url # THIS PRINT WORKS
r = requests.get(source_url)
print "after requests" # THIS ONE DOESN'T
# do other stuff, prints doesn't work
except Exception as e:
print " Error"
raise e
finally:
print "finally" # DOESN'T PRINT
if zip_extract_path:
shutil.rmtree(zip_extract_path)
print "before returning None" # DOESN'T PRINT
return None
我的问题是我可以在uwsgi控制台日志中看到第一个打印,但是第二个实际上却从未发生,而在此请求调用之后的任何其他打印也从未发生。
我已经手动测试了
r = requests.get(source_url)
使用运行此uwsgi应用程序的位置的正确URL,请求实际上会成功并返回OK。
我有点困惑为什么我的印刷品停止工作,如果有人对此有所了解,将不胜感激。
答案 0 :(得分:1)
由于某种原因,在尝试打印不存在的变量并在uwsgi配置中设置--py-autoreload 1
之后,现在显示了我的日志,但我不明白为什么。
答案 1 :(得分:0)
您应将flush = True传递给ex的打印语句。
print("Hello", flush=True)
或使用import sys
sys.stdout.flush()
答案 2 :(得分:0)
原因是您没有重新加载代码。尽管更改并保存了文件,但脚本仍保持运行状态(没有重新启动并重新加载代码)。如果添加自动重载,脚本将检查您的文件是否已更改,并在检测到您修改了代码后重新启动服务器。 py-autoreload = N 意味着它将在N秒内检查您的代码。了解更多:https://serverfault.com/questions/411362/how-do-i-make-uwsgi-restart-when-a-python-script-is-modified/411363