1

最初の ajax 呼び出しがすぐに行われ、コントローラーによって呼び出された関数が何かが読み取られるまでループするとします。たとえば、次のようになります。

def FirstAjax():
    while True:
        if something is read:
            val = something
            break
    return val

何かが読み取られる前に、ユーザーが「戻る」ボタンを押すと、新しい ajax リクエストが送信されます。次に例を示します。

def SecondAjax():
    print "Response from second ajax"

2 番目の ajax 呼び出しは実際に呼び出されます (明らかに、非同期処理について話しているのです :)) が、テキストは FirstAjax ループが完全に完了するまで出力されません。

2 番目のリクエストで python に最初のリクエストからのアクションを停止するように伝えたいのですが、どのように実行できるかわかりません!

4

3 に答える 3

0

問題は解決しました。これは特定のweb2pyの問題でした。

def FirstAjax():
    session.forget(response) # unlock the session file
    [rest of code]

2番目のajaxをすぐに開始できるように、セッションファイルをロックしないようにweb2pyと通信します。もう1つの方法は、次のように設定することです。

session.connect(request, response, db)

モデルでは、セッションはファイルではなくDAL "db"に保存されるため、セッションはロックされません。

これらの2つのソリューションは、私が必要としているものと同じです。

私の場合、戻るボタンが押されたときにデバイスのリリースも行う必要があります。たとえば、ポーリングサイクルでチェックするフラグを追加します。

def FirstAjax():
    session.forget(response) # unlock the session file
    HSCAN.SetLeave(False)
    HSCAN.PollingCycle()
    #Rest of code    

def SecondAjax():
    HSCAN.SetLeave(True)
    #Rest of code 

class myHandScanner():
    def __init__(self):
        self.leave = False

    def SetLeave(self, leave):
        self.leave = leave

    def PollingCycle(self):
        while True:
            if self.leave:
                #Do device release
                return
            if something is read:
                val = something
                break
        #Do device release
        return val

皆さんに感謝し、これがお役に立てば幸いです。

于 2012-05-10T08:26:55.783 に答える
0

セッション ファイルがロックされている可能性があるため、最初のリクエストが完了するまで 2 番目の Ajax リクエストがブロックされる可能性があります。最初の Ajax リクエストでセッションを使用する必要がないと仮定すると、セッションのロックを解除できます。

def FirstAjax():
    session.forget(response) # unlock the session file
    [rest of code]

詳しくはこちらをご覧ください。

于 2012-05-09T18:42:06.740 に答える
0

セロリを使用。

プロセスは次のとおりです。

  1. リクエストをFirstAjax行います。Python は、セロリを使用してタスクをキューに入れます。タスクをすぐに開始することも、数分/時間/日後に開始することもできます。FirstAjax は作成されたタスクの ID を返しますが、タスク自体はバックグラウンドで実行されるようにキューに入れられます。セロリ タスク ID の使用

  2. Make SecondAjax、タスク ID とともに送信します。そのタスク ID を使用して、タスクをキャンセルします。セロリのタスクをキャンセルする方法

于 2012-05-09T17:37:50.837 に答える