2

GAE 上のアプリを Python 2.5 から Python 2.7 に移行しました。

Python 2.7 ではスレッド化が許可されており、バックグラウンドで電子メールを送信するためのスレッドを作成しようとしています。ここにスレッド:

from google.appengine.api import background_thread
from django.core.mail import send_mail

subject = 'Hello!'
msg = '\n \n Hello World!'
sender = settings.DEFAULT_FROM_EMAIL
to = 'xx@xx.com'

t = background_thread.BackgroundThread(target=send_mail, args=[subject, msg, sender, to])
t.start()

GAE で動作するはずですが、アプリをアップロードして実行しようとすると、次のエラーが表示されます。

Django Version: 1.3.1
Exception Type: FrontendsNotSupported
Exception Location: /python27_runtime/python27_lib/versions/1/google/appengine/api/background_thread/background_thread.py in start_new_background_thread, line 84
Python Executable:  /python27_runtime/python27_dist/python
Python Version: 2.7.3

このエラーが表示される理由を知っている人はいますか?


通常のスレッドを使用するコード:

from threading import Thread
from django.core.mail import send_mail

subject = 'Hello!'
msg = '\n \n Hello World!'
sender = settings.DEFAULT_FROM_EMAIL
to = 'xx@xx.com

t = Thread(target=send_mail, args=[subject, msg, sender, to], kwargs={'fail_silently': False})
t.setDaemon(True)
t.start()
4

2 に答える 2

1

インスタンスではバックグラウンド スレッドのみを実行できbackendます。

https://developers.google.com/appengine/docs/python/backends/

バックエンドは特別な App Engine インスタンスであり、リクエストの期限がなく、メモリと CPU の上限が高く、リクエスト間で状態が永続的です。それらは App Engine によって自動的に開始され、長期間にわたって継続的に実行できます。各バックエンド インスタンスには、リクエストに使用する一意の URL があり、複数のインスタンス間でリクエストを負荷分散できます。

フロントエンド インスタンスでは通常のスレッド (スレッド化) を使用できますが、バックエンドでしか使用できませんbackgroundthread

バックエンドで実行されているコードは、バックグラウンド スレッドを開始できます。このスレッドは、それを生成する要求を「存続」させることができます。バックエンド インスタンスは、任意の定期的またはスケジュールされたタスクを実行したり、リクエストがユーザーに返された後もバックグラウンドで作業を継続したりできます。

https://developers.google.com/appengine/docs/python/backends/overview#background_threads

実際にはエラーに表示FrontendsNotSupportedされるため、フロントエンドはサポートされていません。ただし、フロント エンドでは「通常の」Python スレッド構文を使用できます。

于 2013-02-18T19:01:26.300 に答える