技术选择

Choice of technology

正如您可能已经知道的那样,python3 是一个单线程、单处理器程序,这似乎与 tinydb (json) 相得益彰,该状态仅由完整的 python,以及瓶子(网络服务器)。

在这样一个世界中,您希望在预生产或早期生产中拥有一些东西并且流量较低(每周少于 100 人),您如何看待拥有一个 运行 瓶子网站的想法内置 HTTP 服务器 (python) 和 tinydb 作为数据库。

我想知道的两件事是:

a) 数据隔离(或并发):但由于一切都是单线程的,处理器将执行排队 CRUD 操作的工作,一个接一个,不会'没有任何并发​​访问,但关于低流量,我应该关心吗?

b) 等待时间,当处理器排队 10 个想要访问存储在 ram 中的相同 table 的 ppl 时,处理器会将请求排队人们会有等待时间。现在的问题是这是否会被人类注意到,Python 很快(毫秒)。但是我真的不知道如何统计测试 50 个人同时连接到网站并请求相同的资源。

我乐于接受每一个反馈,让我知道。

如果您要进行如此低的流量 + 非常快的仅 RAM 操作,那么它似乎是值得的选择并且也很容易测试。

import bottle

a = bottle.Bottle()


@a.get('/')
def root():
    return {'cheese': ''}


if __name__ == '__main__':
    a.run()

和我们的 test_file:

import time

import requests
from concurrent.futures import ThreadPoolExecutor

def test(index):
    requests.get('http://localhost:8080/').raise_for_status()

pool = ThreadPoolExecutor(max_workers=10)
for i in (1, 10, 50, 100, 1000):
    t = time.time()
    pool.map(test, range(i))
    print(i, 'took', time.time() - t)
print('')

在我的 Mac 上输出:

1 took 0.00046515464782714844

10 took 0.003888845443725586

50 took 0.0003077983856201172

100 took 0.0006000995635986328

1000 took 0.0058138370513916016

这确实不明显。 也就是说,以后添加的每个 IO/CPU/presistancy 东西都会打破您的假设,因此以少量开销为代价,使用更大的并发数据库等可能会更好。