別の Python アプリのフロント エンドとして Web アプリケーションを作成しようとしています。ユーザーにフォームにデータを入力してもらい、送信時にデータをデータベースに保存し、データをスレッド オブジェクト クラスに渡すという考え方です。スレッドは、ユーザーのアクションに基づいて厳密に開始されるものです。私の問題は、スレッドをインポートできるが、threading.Thread にアクセスできないことです。スレッドが終了すると、サーバーが更新されるため、ユーザーがジョブ情報を表示すると、結果が表示されます。
意見:
@login_required(login_url='/login')
def createNetworkView(request):
if request.method == "POST":
# grab my variables from POST
job = models.MyJob()
# load my variables into MyJob object
job.save()
t = ProcessJobThread(job.id, my, various, POST, inputs, here)
t.start()
return HttpResponseRedirect("/viewJob?jobID=" + str(job.id))
else:
return HttpResponseRedirect("/")
私のスレッドクラス:
import threading # this works
print "About to make thread object" # This works, I see this in the log
class CreateNetworkThread(threading.Thread): # failure here
def __init__(self, jobid, blah1, blah2, blah3):
threading.Thread.__init__(self)
def run(self):
doCoolStuff()
updateDB()
私は得る:
Exception Type: ImportError
Exception Value: cannot import name Thread
ただし、コマンド ラインで python を実行すると、スレッドをインポートしたり、スレッドからインポート スレッドを実行したりできます。どうしたんだ?
DjangoとCeleryでスレッドを使用する方法など、他のものを見たことがありますが、それはやり過ぎのように見えました。ありがとうございました。
編集: DB に Django 1.4.1、Python 2.7.3、Ubuntu 12.10、SQLite を使用しており、 . /manage.py runserverで Web アプリケーションを実行しています。