オールドボーイズビデオ--flaskスレッド、コルーチン

要求

(1)シングルスレッドプロセス:輸入の形で確実に問題はありません。 グローバル変数かに基づいて、
(2)単一のマルチスレッドプロセス:サーバ起動して実行した後、スレッドと1上のクライアント要求は、それを処理するために、他のスレッドと2上のクライアント要求は、処理します。リクエストにグローバル変数の値は、いずれかのスレッドが要求の値を変更することができれば、同時要求を処理します。threading.localオブジェクトは、データ・ストレージ(データ分離)、その一意の値を維持するために、各スレッドのためのスペースを開きます。 各スレッドが独自に行うためのスレッドを特定の原則によってであるためthreading.localはスペースを開くことができます。あなたは、私はコルーチンをサポートしたい場合、greenletによって固有の識別コルーチンを得る必要があります。
(3)シングルスレッドプロセス(一つのスレッドがリソースを共有する複数のコルーチンを開くことができる)threading.localオブジェクトはできません。クライアントの要求のためにコルーチンを作成するために処理することができます。プロセスのコルーチンは、クライアントが処理を継続する別のコルーチンを要求することができ、IO要求が発生した場合は、

注:彼らはコルーチンをサポートしている場合(1)、threading.localオブジェクトと
コルーチンをサポートしている場合(2)、あなたは同様のオブジェクトをカスタマイズすることができますthreading.local

コルーチン

  1. あなたは、固有の識別スレッドを取得することができます。

_Threadインポートからget_ident
この関数は固有の識別を得ることができますget_ident()#呼び出しを

  1. コルーチンは、固有の識別を取得することができます:

get_identとしてgreenlet輸入getcurrentから

プロパティの値を設定し、読み

class Foo(object):

    def __setattr__(self, key, value):
        print(key, value)

    def __getattr__(self, item):
        print(item)


obj = Foo()
obj.z = 300
obj.w

同様のthreading.localのカスタムオブジェクト

from greenlet import getcurrent as get_ident
防止反复调用 生成递归
class Local(object):
	def __init__(self):
		object.__setattr__(self, 'storage',{})
        # self.storage = {}				# 设置值
        
	def __setattr__(self, key, value):
        print(key, value)

あなたがオブジェクトのメソッドを呼び出す場合.xxを__setattr__トリガされます

  def __setattr__(self, key, value):
        print(key, value)

おすすめ

転載: blog.csdn.net/xili2532/article/details/91450648
おすすめ