Это скорее ответ на python, чем ответ Flask / werkzeug; но это просто и работает.
Если, как и я, вы хотите, чтобы настройки вашего приложения (загруженные из файла .ini
) также содержали префикс вашего приложения Flask (таким образом, чтобы не устанавливать значение во время развертывания, но во время выполнения) вы можете выбрать следующее:
def prefix_route(route_function, prefix='', mask='{0}{1}'):
'''
Defines a new route function with a prefix.
The mask argument is a `format string` formatted with, in that order:
prefix, route
'''
def newroute(route, *args, **kwargs):
'''New function to prefix the route'''
return route_function(mask.format(prefix, route), *args, **kwargs)
return newroute
Возможно, это несколько хакерское и полагается на то, что функция маршрута колбы требует a route
в качестве первого позиционного аргумента.
Вы можете использовать его следующим образом:
app = Flask(__name__)
app.route = prefix_route(app.route, '/your_prefix')
NB: ничего не стоит, что можно использовать переменную в префиксе (например, установив его на /<prefix>
), а затем обработайте этот префикс в тех функциях, которые вы украшаете своим @app.route(...)
. Если вы это сделаете, вам, очевидно, нужно объявить параметр prefix
в вашей украшенной функции. Кроме того, вы можете проверить представленный префикс на некоторые правила и вернуть 404, если проверка завершилась неудачно. Чтобы избежать 404 пользовательской повторной реализации, пожалуйста, from werkzeug.exceptions import NotFound
, а затем raise NotFound()
, если проверка завершилась неудачно.
VB.Net: Я использовал бы дескриптор события WaitOne.
VB 6.0: я видел Цикл DoEvents.
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
Наконец, Вы могли просто спать:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
В то время как ответ Nescio (DoEvents) будет работать, он заставит Ваше приложение использовать 100% одного ЦП. Сон сделает UI безразличным. То, в чем Вы нуждаетесь, является комбинацией этих двух, и волшебная комбинация, которая, кажется, работает лучше всего:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
Почему два DoEvents и один сон для 55 миллисекунд? Сон 55 миллисекунд является самой маленькой частью, которую может обработать VB6, и использование двух DoEvents иногда требуется в экземплярах, когда суперскорость отклика необходима (не API, но если Вы приложение отвечаете на внешние события, SendMessage, Interupts, и т.д.).
Как определить, когда покрытый оболочкой процесс завершился:
При вызове внешнего процесса затем, Вы, в действительности, называете его асинхронно. Обратитесь к вышеупомянутой Документации поддержки MS для того, как ожидать, пока Ваш внешний процесс не завершен.
Взломайте свой код в 2 процесса. Выполните первое, затем выполните свой "длительный процесс", затем выполните второй процесс.
Выполните свой продолжительный процесс посреди Вашего текущего процесса и ожидайте его для завершения.