Python Tornadoは大量に画像をアップロードして機能を表示します

3204 ワード

概要
Tornado竜巻は、ソーシャル集約サイトFriendFeedのリアルタイム情報サービスに基づいて開発されたオープンソースのネットワークサーバフレームワークです.2007年にGoogleの元ソフトウェアエンジニア4人が共同でFriendFeedを設立し、FacebookやTwitterなど多くのソーシャルサイトでの友人の活動を簡単に追跡できるようにした.その結果、2年後、FacebookはFriendFeedの買収を発表し、取引価格は約5000万ドルだった.この時点でFriendFeedには12人の従業員しかいません.彼らは後にGoogleに着いて、今のGoogle App Engineを作ったそうです...
このWebサーバを開発する主な目的は、FriendFeedのリアルタイム機能を処理することです.FriendFeedのアプリケーションでは、アクティブなユーザーごとにサーバ接続が維持されています.
TornadoはFriendFeedが使用する拡張性のある非ブロックWebサーバとその関連ツールのオープンソースバージョンを使用し、このWebフレームワークはwebのように見えます.pyまたはGoogleのwebappですが、非ブロックサーバ環境をより効果的に利用するために、TornadoというWebフレームワークには、いくつかの関連する有用なツールと最適化が含まれています.
区別する
Tornadoは現代の主流のWebサーバフレームワークと明らかな違いがあります.それは非ブロック式のサーバをかなり速くします.これは,その非閉塞方式とepollの運用のおかげである.Tornadoは毎秒数千個の接続を処理することができ、リアルタイムのWebサービスにとってTornadoは確かに理想的なWebフレームワークである.
ノードとjsと同様に,Tornadoも,非同期非ブロックプログラムを記述できる単一プロセス単一スレッド非同期IOのネットワークモデルを採用している.だがNode.jsはGoogle Chrome V 8エンジンのJS実行環境またはツールパッケージであり、下位層の抽象に属し、JSがサーバプログラムを記述する能力を拡張しているため、Nodeに基づいている.jsは異なるWebフレームワークで構成されます.この角度から見ればjsとTornadoは実は1つの階層ではありません.
TornadoはPythonを使用して作成されたWebサーバ兼Webアプリケーションフレームワークであり、主流のWebサーバフレームワークとは異なり、Tornadoは非同期非ブロックサーバであり、非ブロック式とepollモデルの運用のおかげで、TornadoはリアルタイムWebサービスの理想的なフレームワークであり、長ポーリング、WebSocket、各ユーザーとの永続的な接続を必要とするアプリケーションの開発に非常に適している.
特長
  • 軽量Webフレーム
  • 非同期非ブロックIO処理方式
  • Tornadoが採用した単一プロセス単一スレッド非同期IOのネットワークモードは、TornadoがLinuxベースのEpoll(UNIXはkqueue)の非同期ネットワークIOに高エネルギーである.
  • 優れた耐負荷性
  • マルチプロセスまたはマルチスレッド
  • に依存しない
  • WSDiフルスタック代替製品
  • WSGIはアプリケーション(Application)とサーバ(Server)を結合し、TornadoはWSGIアプリケーションでもWSGIサービスでもよい.
  • WebServerでありWebFramework
  • TornadoはBret Taylorと他の人々がFrientFeedのために開発したネットワークサービスフレームワークに基づいており、FriendFeedがFacebookに買収された後にオープンソースになった.最大1 wの同時接続しかできない従来のネットワークサーバとは異なります.Tornadoは設計当初から性能要因を考慮し,C 10 Kの問題を解決することを目的としており,このような設計は高性能のフレームワークとなっている.
    テキストの開始
    問題の説明
    Python Tornadoは大量に画像をアップロードして表示して、前後の端はすべて表示します
    構想
    1.ファイルのアップロード
    フロントエンドFormDataアップロード、バックエンドBytesiO解析
    2.画像を表示
    フロントエンドFileReader読み取り表示、バックエンドmatplotlib表示
    コード#コード#
    index.html
    
    
    
              
     
     
    
    
    
    
    $('#send').change(function () { var files = $('#send')[0].files; var form = new FormData(); for (var i = 0; i < files.length; i++) { // form var file = files[i]; console.log(file); form.append('files', file); // var fileReader = new FileReader(); fileReader.readAsDataURL(file); fileReader.onloadend = function (event) { var src = event.target.result; $('body').append('<img src=' + src + ' width=200px>'); } } // $.ajax({ type: 'POST', url: '/upload', data: form, processData: false, contentType: false, success: function (response) { console.log(response) } }); })