Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使flask通过app.run命令执行函数?_Python_Heroku_Flask - Fatal编程技术网

Python 如何使flask通过app.run命令执行函数?

Python 如何使flask通过app.run命令执行函数?,python,heroku,flask,Python,Heroku,Flask,我一直在尝试按照教程来让flask应用程序在Heroku上运行,比如这个: 它们都告诉您将此代码放入文件server.py: from flask import Flask app = Flask(__name__) app.run(host='0.0.0.0') 然后通过以下命令运行应用程序: python3 server.py 但是这些教程并没有解释如何使用应用程序连接您想要运行的实际功能。在本例中,我有一个文件testbot.py,该文件具有函数test(arg1),其中包含我要执行

我一直在尝试按照教程来让flask应用程序在Heroku上运行,比如这个:

它们都告诉您将此代码放入文件
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')
因此,当应用程序运行my
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
按预期运行。

app.run
之前,使用路径注册函数,例如

@app.route('/')
def test():  # no argument
    ... do one iteration
    return 'ok'
然后访问URL将触发该函数。如建议的那样,像这样的网站可以自动进行定期免费访问

如果定期间隔不够好,您可以尝试:

@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看到服务器处于活动状态并且正在使用。

如何将“在twitter上处理arg1”与您想要运行的web服务联系起来?什么会导致“做事…”发生?这是同步发生(可能不是)还是异步发生(更有可能)?web服务器响应HTTP请求。试着从这个角度考虑你的应用程序。太好了!它是否与多线程应用程序一起工作,并且只能从一个线程(初始主线程)调用?是的,它工作正常,并且我不需要
app.route函数
!我承认,我不确定这是否是最佳实践,但我现在可以从Heroku服务器运行我的机器人。谢谢根据“唯一的限制是,如果在30分钟内不被访问,你的应用程序将被杀死”。我自己从来没有这样做过,所以我不能确认,但要注意这种可能性,因此至少有一条路径的路由。很好,我会注意的。谢谢