技术选择



您可能已经知道,python3是一个单线程,单处理器程序,这似乎与tinydb (json)状态良好,仅由完整的python以及瓶子(web服务器)组成。

如果你想在预生产或早期生产和低流量(<100 ppl一周)的世界里,你认为有一个内置HTTP服务器(python)和tinydb作为数据库的运行瓶网站的想法。

我想知道的两件事是:

a)数据隔离(或并发):但由于一切都是单线程的处理器将做CRUD操作排队的工作,一个接一个,不会有任何并发访问,但关于低流量,我应该关心吗? b)等待时间,当处理器对10个PPL进行排队时,这些PPL希望访问存储在ram中的同一表,处理器将对请求进行排队,人们将有等待时间。现在的问题是,这是否会引起人类的注意,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取0.00046515464782714844

10取0.003888845443725586

50 took 0.0003077983856201172

100 take 0.0006000995635986328

1000取0.0058138370513916016

🥳

确实是不明显的。也就是说,以后添加的每一个IO/CPU/阻力都将打破您的假设,因此,以较小的开销为代价,使用更大的并发DB等可能会更好。😀

最新更新