-1

別の 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 を実行すると、スレッドをインポートしたり、スレッドからインポート スレッドを実行したりできます。どうしたんだ?

DjangoCeleryでスレッドを使用する方法など、他のものを見たことがありますが、それはやり過ぎのように見えました。ありがとうございました。

編集: DB に Django 1.4.1、Python 2.7.3、Ubuntu 12.10、SQLite を使用しており、 . /manage.py runserverで Web アプリケーションを実行しています。

4

1 に答える 1

0

これは私が持っていたばかげた問題でした。最初に、「threading.py」というファイルを作成しましたが、誰かがそれを削除することを提案しました。問題は、私が Eclipse を使用していたためでした。Eclipse 用の PyDev (Python) プラグインは、私が作成した threading.py ファイルのみを削除し、*.pyc ファイルを非表示にします。PyDev には孤立した .pyc ファイルを削除するオプションがありましたが、threading.pyc ファイルが残っていました。

于 2013-01-07T19:18:49.780 に答える