技术选择
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 东西都会打破您的假设,因此以少量开销为代价,使用更大的并发数据库等可能会更好。
正如您可能已经知道的那样,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 东西都会打破您的假设,因此以少量开销为代价,使用更大的并发数据库等可能会更好。