我想 运行 Python 服务器上的脚本 24/7

I want to run a Python Script on a Server 24/7

我正在制作一个模拟虚拟货币股票市场的程序。我还没有尝试过任何东西,但我想要一个 Python 脚本来 运行 24/7 在线很长一段时间。 python 脚本应该是这样的:

import time
import random
  
while True:
    number = random.randint(0,5)
    print(number)
    time.sleep(2)

此外,一个单独的本地 Python 程序应该能够每 2 秒不断地检索 number 变量。我不需要对产品或服务的推荐。我只需要知道我需要什么代码 运行 以及我是否需要物理服务器或网络服务器。

如果我使用网络服务器,我将长期按月付费。这个项目理论上需要 运行 在线年(撇开停机和维护)。

我对服务器和网络几乎没有任何经验,在网上找不到答案。同样,我还没有尝试过任何东西。

听起来很有趣。不应该花费你任何东西。流行的无服务器选项(Azure Functions、AWS Lambda 等)每月提供 100 万次免费调用。
如果我没记错的话,Google的Cloud Function是2M。

有一个很好的 IDE replit.com 在那里你可以 运行 你的 python 但如果你想 运行 它 24/7 你有要获得“黑客”计划,如果您将 github 教育包连接到您的 replit 帐户,您可以免费获得该计划,如果您在大学或高中持有学生证,则此包也是免费的。您可以通过在代码中添加保持活动脚本来解决此问题。它有相当快的服务器,几乎没有停机时间。

如果你真的只想模拟它并且只有一个用户。每次用户进行查询时,您可以 return 一个随机数。他们查询的频率无关紧要。您可以将其放在本地或英雄免费计划中。但是用户每 2 秒查询一次,这意味着很多请求,因此您可能会超过配额。

import random
from flask import Flask
import time

app = Flask(__name__)

@app.route("/")
def hello_world():
    return random.randint(0,5)

假设你在本地端口 5000 上安装它。然后,只需通过 python 转到“localhost:5000”,或者浏览器会给你那个随机数。

要为多人提供服务,您需要一个单独的线程 运行 生成号码。然后,视图将 return URL 处的数字。例如,

from flask import Flask
import random
import threading

app = Flask(__name__)

number = 0

@app.route("/")
def hello_world():
    """ URL returns random number """
    return str(number)


def gen_rand():
    """ generating random numbers """
    global number
    while True:
        number = random.randint(0, 5)
        time.sleep(2)

if __name__ == '__main__':
    # starting thread to generate the number
    x = threading.Thread(target=gen_rand, daemon=True)
    x.start()

    # starting web server
    app.run()

默认情况下,本地网络服务器将从 localhost:5000 开始,在您的浏览器中转到此 URL,您将看到随机生成的编号。您可以打开多个浏览器选项卡,如果在 2 秒内刷新,它们将给出相同的随机数。

请注意,使用全局变量不是 thread-safe 或进程安全的。你应该使用数据库或redis来更新和加载“number”。请参阅此问题以进行进一步讨论:.