0

トルネードのコルーチンの仕組みはわかったのですが、ここでわからない問題がありましたので、手を貸してください

このビジネス ルーチンを検討してください。ここに 5 つのデータベース操作があります

#operation 1
#use asynchronous method ,doesn't matter
#switch to other coroutine

#operation 2
#use asynchronous method ,doesn't matter
#switch to other coroutine


#operation 3
#use asynchronous method , but i'll use the result do 
#some process then update in operation 4
#switch to other coroutine


#operation 4
#use asynchronous method ,doesn't matter
#switch to other coroutine


#operation 5
#use asynchronous method ,doesn't matter
#switch to other coroutine

ご覧のとおり、他の関連するコルーチンがそれぞれの操作 3 と操作 4 の間で同じテーブルまたは同じレコードに更新されることを望んでいません。つまり、ダーティな読み取りと書き込みが行われます。

#coroutine 1 operation 3
#coroutine 2 operation 3
#coroutine 1 operation 4
#coroutine 2 operation 4

受け入れられない場合、適切な順序にする必要があります

#coroutine 1 operation 3
#coroutine 1 operation 4
#coroutine 2 operation 3
#coroutine 2 operation 4

操作 3 でブロック メソッドを使用できますが、それはサーバー全体をブロックします。解放するように指示するまで、メイン ループが特定のコルーチンを実行しないことを願っています。

4

1 に答える 1

0

私が考えた後、これはばかげていました。

これは、シングルスレッドプログラムの練習では本当にシンプルで基本的でした

global flag
while flag:
    do some asynchronous empty callback
flag = True

#operation 3
#use asynchronous method , but i'll use the result do 
#some process then update in operation 4
#switch to other coroutine

#operation 4
#use asynchronous method ,doesn't matter
#switch to other coroutine

flag = False

終わり。

于 2012-08-31T05:48:01.713 に答える