非同期的に例をメッセージを送信するために、名前「アプリ」をインポートすることはできません。pythonWebウィンカー信号フレームフラスコは、ビジネスコードデカップリング機構はImportErrorを解決するために使用します

Baiduの一日の大半は、あなたがjavaファイルを書き込む前に分離されているので、解決策を考えるためにウィンカーを学習するまで、方法がわかりません

そのため、Eメールサービスコードは、ビューの内部に配置されますが、非同期スレッドアプリケーションを使用する必要がありますされ、痛みの卵他のモジュールがapp.pyから任意の変数をインポートすることはできません。

すなわち: 

app.pyマスターファイル、view.pyビジネス文書である、私が行う方法の変数を考慮してアプリを使用する必要があり、Baiduの多くは、検索する方法はありません

ここでは、それは、信号で最初のレコードを達成することができます:

python3内蔵ウインカーは、最初のビューに信号を定義する、直接使用することができます。

 

(この機能は、アプリを使用する必要があり、我々は唯一のappp.py年で書くことができます)あなたが使用したい機能app.pyを接続し、アプリが変数の他のモジュールをインポートすることができます。

フラスコメール送信中()関数はCURRENT_APPを使用して、アプリケーション・コンテキストを有効にする必要があります。しかし、異なるスレッドでmail.send()関数で、アプリケーションコンテキストの実装が使用されるapp.app_contextは()人工作成するために
DEFのsend_async_email(MSG):
     印刷--- ---送信を開始
    app.app_contextで():
        mail.send(MSG)


#1 量信号がビュー内に導入され、非同期伝送機能と接続 
signal.connect(send_async_email)

 

信号呼び出すアプリの機能を使用して最後のビュー:

 

user.routeの@(' / sendsync / ' DEF (send_sync_mail):
    MSGはメッセージを=(=件名" !こんにちは世界" 
                  SENDER = " [email protected] " 
                  受信者 = [ " [email protected] " ])
    msg.body = " テスト非同期送信" 
    msg.html = " <H2>試験非同期伝送</ H2> " 
    のThrは、スレッド(目標= signal.send、引数の= = [MSG、])
    のThrを。スタート() 
    の戻り OK "

 

最後のテストは成功しました:

ここでは、また、送信者のような唯一の指定されたパラメータを、受け入れを使用することができます。

時間は2であるときにのみ、round_two方法を入力します

おすすめ

転載: www.cnblogs.com/houzheng/p/10990372.html