Как заставить колбу выполнять функцию с помощью команды app.run? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытался следовать учебным пособиям, чтобы заставить приложения колб работать на Heroku, например: https://dev.to/emcain/how-to-set-up-a-twitter-bot-with-python-and-heroku-1n39.

Все они говорят вам, чтобы вы поместили это в свой код в файл server.py:

from flask import Flask

app = Flask(__name__)
app.run(host='0.0.0.0')

А затем запустите приложение с помощью следующей команды:

python3 server.py

Но учебные пособия не объясняют, как подключить реальную функцию, которую вы хотите запустить, используяприложение.В моем случае у меня есть Файл testbot.py, в котором есть функция test(arg1), содержащая код, который я хочу выполнить:

def test(arg1):
  while(1):
    #do stuff with arg1 on twitter    

Я хочу сделать что-то вроде этого:

from flask import Flask
from testbot import test
from threading import Thread

app = Flask(__name__)
app.addfunction(test(arg1='hardcodedparameter'))
app.run(host='0.0.0.0')

Чтобы при запуске приложения моя функция test() выполнялась с аргументом.Прямо сейчас мой сервер запускается, но ничего не происходит.

Правильно ли я думаю об этом?

* Редактировать: у меня все работает с решением, поэтому мой server.py теперь выглядит следующим образом:

from flask import Flask
from testbot import test 

def main_process():
    test("hardcodeparam")

app = Flask(__name__)
Thread(target=main_process).start()
app.run(debug=True,host='0.0.0.0')

А теперь test работает как положено.

1 Ответ

0 голосов
/ 24 февраля 2019

До app.run, зарегистрируйте функцию с путем, например,

@app.route('/')
def test():  # no argument
    ... do one iteration
    return 'ok'

. Затем посещение URL вызовет функцию.Такие сайты, как https://cron -job.org / , могут автоматически автоматизировать это посещение на регулярной основе, как предлагается здесь .

Если регулярные интервалы не отображаютсяЕсли вы не достаточно хороши, вы можете попробовать:

@app.route('/')
def index():  # no argument
    return 'ok'

def test():
    while True:
         # do stuff

from threading import Thread
Thread(target=test).start()

app.run(...)

Возможно, вам все равно потребуется работа, регулярно посещающая URL, чтобы Heroku обнаружил, что сервер жив и используется.

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