首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >技术选择

技术选择
EN

Stack Overflow用户
提问于 2021-08-09 12:23:57
回答 1查看 37关注 0票数 0

正如您可能已经知道的,python3是一个单线程的单处理器程序,这似乎与tinydb (json)非常适用,该状态只由完整的python以及瓶(web服务器)组成。

在这样一个世界里,你想要在生产前或早期生产中有一些东西,并且流量低(每周<100 ppl ),你认为有一个使用内置HTTP服务器(python)和tinydb作为数据库的运行瓶网站的想法是什么?

我想知道的两件事是:

( a) 数据隔离(或并发性):但是由于每件事都是单线程的,处理器将负责依次排队CRUD操作,因此不会有任何并发访问,但对于低流量,我应该关心吗?

( b) 等待时间,当处理器排队10 ppl,希望访问存储在ram中的同一个表时,处理器将对请求进行排队,人们将有等待时间。现在的问题是,Python是快速的(milisec),这是否是人类所能注意到的。然而,我真的不知道如何统计测试50 ppl在同一时间连接到网站,并要求相同的资源。

我愿意接受每一个反馈,让我知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 05:36:54

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

代码语言:javascript
运行
复制
import bottle

a = bottle.Bottle()


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


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

我们的test_file:

代码语言:javascript
运行
复制
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都会打破您的假设,因此,在开销较小的情况下,最好使用一个更大的并发DB等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68712012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档