uwsgi + фляга + печать питона перестают работать после request.get () - PullRequest
0 голосов
/ 17 декабря 2018

У меня возникла проблема при попытке войти в систему с помощью uwsgi из консоли с помощью uwsgi.

Поэтому я запускаю свое приложение из консоли с помощью:

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

Класс выполнения рабочего вызывает метод преобразования:

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)

с правильным URL-адресом от места, где выполняется это приложение uwsgi, и запросы фактически выполняются и возвращаются OK.

Я немного озадачен, почему мои отпечатки перестают работать. Если кто-нибудь поймет это, это будет с радостью оценено.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

По некоторым причинам, после попытки напечатать несуществующую переменную и установки --py-autoreload 1 в конфигурации uwsgi, теперь отображаются мои журналы, хотя я не понимаю, почему.

0 голосов
/ 18 декабря 2018

Причина в том, что вы не перезагрузили свой код.Несмотря на то, что вы изменили и сохранили свой файл, ваш скрипт продолжает работать (не перезагружал и не перезагружал код).Если вы добавите автозагрузку, скрипт проверит, изменился ли ваш файл, и перезапустите сервер, когда он обнаружит, что вы изменили код. py-autoreload = N означает, что он проверит ваш код, хотя бы N секунд.Читать подробнее: https://serverfault.com/questions/411362/how-do-i-make-uwsgi-restart-when-a-python-script-is-modified/411363

0 голосов
/ 17 декабря 2018

Вы должны передать flush = True, чтобы напечатать заявление для ex.

print("Hello", flush=True)

или используйте import sys sys.stdout.flush()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...