私たちは通常、このようなニーズに遭遇します。複雑な機能モジュールは C++ またはその他の下位言語を通じて実装され、データをクエリするために Web ベースのデモを構築する必要があります。 Python 言語のパワーとシンプルさにより、Flask フレームワークと jinja2 モジュール関数は Python に便利な Web 開発機能を提供します。同時に、Python は他の言語のコードと簡単に対話できます。したがって、デモを開発するためのツールとして Python を選択します。呼び出す必要があるモジュール (基礎となるサービスを提供する) が標準入力を介してループでデータを読み取り、処理後に結果をマークされた出力に書き込むと仮定します。このシナリオは Linux 環境では非常に一般的であり、Linux の強力なリダイレクト機能に依存しています。 。ただし、残念ながら、基礎となるモジュールには大量の初期化プロセスがあるため、クエリ要求ごとに基礎となるモジュールを呼び出す子プロセスを再生成することはできません。解決策は、子プロセスを 1 回だけ生成し、リクエストごとにパイプを介して子プロセスと対話することです。
Python のサブプロセス モジュールは、Linux システム コールの fork および exec と同様に、サブプロセスを簡単に生成できます。サブプロセス モジュールの Popen オブジェクトは、外部の実行可能プログラムをノンブロッキングで呼び出すことができるため、ニーズを達成するために Poen オブジェクトを使用します。サブプロセスの標準入力 stdin にデータを書き込む場合は、Popen オブジェクトの作成時にパラメータ stdin を subprocess.PIPE として指定する必要があります。同様に、サブプロセスの標準出力からデータを読み取る必要がある場合は、次のようにします。 Popen オブジェクトを作成するときは、パラメータ stdout を subprocess.PIPE として指定する必要があります。まず簡単な例を見てみましょう:
from subprocess import Popen, PIPE p = Popen('less', stdin=PIPE, stdout=PIPE) p.communicate('Line number %d.\n' % x)
communication 関数は、子プロセスの標準出力とエラーを示す出力データを含むタプル (stdoutdata、stderrdata) を返します。ただし、Popen オブジェクトの通信関数は親プロセスをブロックし、パイプも閉じるため、複数のリクエストがある場合、各 Popen オブジェクトは通信関数を 1 回しか呼び出すことができません。Popen オブジェクトを再生成する (子プロセスを再初期化する) 必要があります。それは私たちのニーズを満たすことができません。
したがって、Popen オブジェクトの stdin オブジェクトと stdout オブジェクトにデータを読み書きすることによってのみニーズを達成できます。ただし、残念ながら、サブプロセス モジュールはデフォルトでは、サブプロセスの終了時に 1 回だけ実行され、標準出力を読み取ります。サブプロセスと os.popen* は両方とも入出力を 1 回だけ許可し、出力はプロセス終了時にのみ読み取られます。
いくつか調べた結果、サブプロセスの標準出力は fcntl 関数を通じて出力できることがわかりました。 fcntl モジュール 目的を達成するためにノンブロッキングメソッドに変更します。長年私を悩ませてきたこの問題が、ついに完全に解決されました。コードは次のとおりです:
#!/usr/bin/python # -*- coding: utf-8 -*- # author: weisu.yxd@taobao.com from subprocess import Popen, PIPE import fcntl, os import time class Server(object): def __init__(self, args, server_env = None): if server_env: self.process = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=server_env) else: self.process = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) flags = fcntl.fcntl(self.process.stdout, fcntl.F_GETFL) fcntl.fcntl(self.process.stdout, fcntl.F_SETFL, flags | os.O_NONBLOCK) def send(self, data, tail = '\n'): self.process.stdin.write(data + tail) self.process.stdin.flush() def recv(self, t=.1, e=1, tr=5, stderr=0): time.sleep(t) if tr < 1: tr = 1 x = time.time()+t r = '' pr = self.process.stdout if stderr: pr = self.process.stdout while time.time() < x or r: r = pr.read() if r is None: if e: raise Exception(message) else: break elif r: return r.rstrip() else: time.sleep(max((x-time.time())/tr, 0)) return r.rstrip() if __name__ == "__main__": ServerArgs = ['/home/weisu.yxd/QP/trunk/bin/normalizer', '/home/weisu.yxd/QP/trunk/conf/stopfile.txt'] server = Server(ServerArgs) test_data = '在云端', '云梯', '摩萨德', 'Alisa', 'iDB', '阿里大数据' for x in test_data: server.send(x) print x, server.recv()
さらに、一部の外部プログラムを呼び出すときは、次のように対応する環境変数を指定する必要がある場合があります:
my_env = os.environ my_env["LD_LIBRARY_PATH"] = "/path/to/lib" server = server.Server(cmd, my_env)

PythonArraysSupportVariousoperations:1)SlicingExtractsSubsets、2)Appending/ExtendingAdddesements、3)inSertingSelementSatspecificpositions、4)remvingingDeletesements、5)sorting/verversingsorder、and6)listenionsionsionsionsionscreatenewlistsebasedexistin

numpyarraysAressertialentionsionceivationsefirication-efficientnumericalcomputations andDatamanipulation.theyarecrucialindatascience、mashineelearning、物理学、エンジニアリング、および促進可能性への適用性、scaledatiencyを効率的に、forexample、infinancialanalyyy

UseanArray.ArrayOverAlistinPythonは、Performance-criticalCode.1)homogeneousdata:araysavememorywithpedelements.2)Performance-criticalcode:Araysofterbetterbetterfornumerumerumericaleperations.3)interf

いいえ、notallistoperationSaresuptedbyarrays、andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorintorintorinsertizizing、whosimpactsporformance.2)リスト

toaccesselementsinapythonlist、useindexing、negativeindexing、slicing、oriteration.1)indexingstartsat0.2)negativeindexingAcsesess.3)slicingextractStions.4)reterationSuseSuseSuseSuseSeSeS forLoopseCheckLentlentlentlentlentlentlenttodExeror。

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ホットトピック









