0

您可能已经知道,python3 是一个单线程、单处理器程序,这似乎与仅由完整 python 和瓶子(Web 服务器)组成的状态的 tinydb (json) 配合得很好。

在一个您希望在预生产或早期生产和低流量(每周<100 ppl)的世界中,您如何看待使用内置 HTTP 服务器(python)运行瓶子网站的想法和tinydb 作为数据库。

我想知道的两件事是:

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

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

我对每一个反馈持开放态度,请告诉我。

4

1 回答 1

1

如果您要进行如此低的流量 + 非常快的仅 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 花了 0.00046515464782714844

10 花了 0.003888845443725586

50 拿了 0.0003077983856201172

100 花了 0.0006000995635986328

1000 拿了 0.0058138370513916016

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

于 2021-08-11T05:36:54.057 回答