2020年1月24日金曜日

Python的Sanic框架每秒可以处理多少数据?





 您可以通过查看页面来判断。 JSON序列化为每秒283,645。

但是,该数字几乎没有实际意义。

首先,典型的Web服务器执行诸如用户身份验证,数据库访问和HTML创建之类的过程,因此处理时间要长得多。 这仅意味着Sanic的处理时间可以忽略不计。

而且,在很多情况下,Web应用程序每秒需要超过1000个进程。 首先,诸如Niginx之类的Web服务器可以处理和缓存静态文件。 如果这样做的话,公司的10,000名员工的内部系统不太可能每秒需要1000个流程。

即使在现在,仍主要使用Dgango和Flask,因为它们在许多情况下通常就足够了。 如果遇到问题,通常最好使用Go语言,该语言比在Python中使用Sanic更快,并且具有更多的并行处理功能。 请注意,这并不意味着不使用Sanic,而是如果每秒的进程数量变得非常大,则Python本身通常不适合该进程。 。
观看次数 :80次· 石冢雅弘要求
欣赏
分享到



推荐顺序
全部

感谢您的回答。
>通常,最好使用Go语言,该语言比Python中使用Sanic更快,并且具有更多并行处理功能。

我一起看


结论

  •  GIL确保多线程不会从多核中受益。

如果这个博客是对的,并且我们一起考虑,那么Python是一种不利用多核CPU的编程语言。 如果您不需要AI(人工智能)或机器学习库,那么Go lang比Python更好,但是如果AI(人工智能)和机器学习库针对Go lang,Python进行了增强我们希望将来能解决多核CPU的框架或正式支持。 Google还开发了一个名为TensorFlow for Go lang 的AI,机器学习和数值分析库。 尽管此API可以与Go lang一起使用,但仍然只有Python可以构建和学习模型,因此我希望将来会对其进行改进。
回覆

就GIL而言,这通常不是问题,因为可以通过用C / C ++编写或使用C / C ++编写的库来消除繁重的处理。 但是,如果每秒的操作数变得非常大,则无法避免处理冲突,并且Python效率低下。 因此,我只建议使用Go。 如果不是很大,那么仅使用Python进行开发就不会有问题。 对于大规模应用,可能需要计算和测试Python是否能单独承受和测试。

对于机器学习,训练使用大量数据来进行大量计算。 在这方面,Python擅长Go,而擅长Go,因此Go将永远无法构建和学习机器学习模型。

另一方面,在使用学习结果的过程中,由于仅使用结果,因此计算是轻量的。 如果您必须在此处处理大量处理,则可以使用Go的API,因为出于上述原因,Go更适合。

TesorFlow和Go都是由Google开发的,但这是考虑到Python和Go的特性的结果,因此最好将其统一。
回覆
欣赏

显示问题
受访者介绍

您认识的1个关注者

2013年至今担任自由职业者

京都 大学理学系

住在德岛的 0–0

浏览的内容:344.6k次本月:26.9k次
活跃于1个空间

----
Python 4是否真正兼容多核和多线程?
评论:
阅读Python3的博客是验证。
也许吧
在Python2和3中,由于它是伪造的多核和多线程,因此已验证它与真正的多核和多线程(例如JAVA或Go lang(Go语言))不同。

真正的具有uvloop的多核和多线程支持?
也许可以说。
怡安首席执行官石冢正宏
电话:042-559-8638
iPhone:070-3861-5011

找出为什么asyncio使用POSIX线程
  

共享的。

Tokibito-sensei( id:nullpobug )叫到办公室去玩,所以我们去了公开的收藏家。 我与aodag先生聊天 ( id:aodag ),但我记得我以前担心过的事情。

我很担心

准备学习报告的演示文稿时,我准备了一个代码示例,该示例使用asyncio和aiohttp向服务器发送HTTP请求。
  导入 aiohttp
 导入异步

异步def 提取 (l,url):
      aiohttp.ClientSession(loop = l) 作为会话异步:
          session.get(URL)异步作为响应:
             返回等待response.text()


异步def main (l,url,num):
    任务= [  范围 (num)中的_提取(l,url)]
     返回等待asyncio.gather(*任务)


 如果 __name__ == ' __main__ '
    循环= asyncio.get_event_loop()
    结果= loop.run_until_complete(主要(循环, 'http://本地主机:8000'3 ))
     对于 r结果:
         打印 (r)
PyCharm具有显示“并发图”的功能,可以检查线程和进程的移动,执行该代码时线程的行为如下。
f:id:nwpct1:20170330234242p:普通
由于某种原因,出现了current.futures.ThreadPoolExecutor。 我试图找出文档中写的内容,但是由于找不到任何此类描述,我放弃了,问奥达格和托基比托。

socket.getaddrinfo

他在几十分钟内找到了原因。 socket.getaddrinfo是同步执行的,因此cpython实现似乎不是异步执行此操作,而是concurrent.futures.ThreadPoolExecutor多个线程中执行current.futures.ThreadPoolExecutor。
准备使用aioredis的样本作为不使用getaddrinfo的代码样本。 使用UNIX 套接字连接到本地构建的Redis服务器。
  导入异步
 进口 aioredis

异步def connection_example (key):
     conn =等待aioredis.create_connection( '/tmp/redis.sock'
     return await conn.execute( 'GET' ,键)


异步def main (数字):
    任务= [ 范围 (num)中_的connection_example( 'my-key' )]
     返回等待asyncio.gather(*任务)


 如果 __name__ == ' __main__ '
    循环= asyncio.get_event_loop()
    结果= loop.run_until_complete(主要( 3 ))
     对于 r结果:
         打印 (r)
顺便说一下,redis config是↓。
 守护否
 pidfile /var/run/redis.pid
 unixsocket /tmp/redis.sock
 unixsocketperm 700
日志文件“”
数据库1 
看这时的并发图,
f:id:nwpct1:20170331163806p:普通
当然,没有创建线程。
访问外部Redis服务器
另一方面,如果您在外部准备一个Redis服务器并连接它(这次我使用arukas.io ),
  导入异步
 进口 aioredis

异步def connection_example (key):
     conn =等待aioredis.create_connection(
        'seaof-xxx-xxx.arukascloud.io'311390 ),
         db = 0 ,密码= 'xxxxxxxxxxxxxxx'
     return await conn.execute( 'GET' ,键)


异步def main (数字):
    任务= [ 范围 (num)中_的connection_example( 'my-key' )]
     返回等待asyncio.gather(*任务)


 如果 __name__ == ' __main__ '
    循环= asyncio.get_event_loop()
    结果= loop.run_until_complete(主要( 3 ))
     对于 r结果:
         打印 (r)
执行后,如下所示。
f:id:nwpct1:20170331163620p:普通
似乎毕竟创建了一个工作线程。

为ThreadPoolExecutor创建了多少个工作线程?

将信号量中的同时执行次数限制为3时的并发图如下。
f:id:nwpct1:20170331164208p:普通
显然,ThreadPoolExecutor中的Thread不被重用。 ThreadPoolExecutor下的文档中描述了它的创建程度。
如果max_workers为None或未指定,则默认值为计算机上的处理器数乘以5。
17.4。Concurrent.futures –并发任务执行– Python 3.6.1文档
我发送了大约30个试用请求(信号量为3)。
f:id:nwpct1:20170331164432p:普通
生成了多达20个,并确认此后它们已被重新使用。 尽管由于实现原因无法更改工作线程的上限,但是不太可能出现任何问题。

uvloop

至于uvloop,已确认他们不使用POSIX线程就可以工作。
  导入 uvloop

 #省略
循环= uvloop.new_event_loop()
 asyncio.set_event_loop(循环)
执行后,
f:id:nwpct1:20170330232815p:普通
真的

结论

Aodag-sensei和tokibito-sensei很棒……我正在阅读文件,使文件潮湿,但是花了我几分钟的时间才找到原因并告诉我。 从明天起我也是社会的一员,所以我要为两个人努力。
与aodag先生和tokibito先生一起开放的收藏家似乎正在寻找工作。 谢谢你

0 コメント:

コメントを投稿