Pages - Menu

Pages - Menu

Pages

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太棒了……我正在閱讀文件,使文件潮濕,但是花了我十分鐘的時間才找到原因並告訴我。 從明天起我也是社會的一員,所以我要為兩個人努力。
奧達格先生和托比比托先生的公開收藏家似乎正在招聘工作。 謝謝你







0 件のコメント:

コメントを投稿