无法在Django app中使用Python的threading.Thread

时间:2013-01-04 18:01:10

标签: python django multithreading django-views

我正在尝试创建一个Web应用程序作为另一个Python应用程序的前端。我让用户在表单中输入数据,并在提交时,想法是将数据保存在数据库中,并将数据传递给线程对象类。该线程是基于用户操作严格启动的。我的问题是我可以导入线程,但无法访问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,我可以导入线程,也可以从线程导入线程。这是什么交易?

我已经看过其他内容,例如How to use thread in DjangoCelery,但这看起来有些过分,我看不出该示例如何导入线程并使用线程。当我不能时,我就看不到。 谢谢。

编辑:我正在使用Django 1.4.1,Python 2.7.3,Ubuntu 12.10,SQLite用于数据库,而我正在使用 ./ manage.py runserver 运行Web应用程序。

1 个答案:

答案 0 :(得分:0)

这是一个愚蠢的问题。首先,我创建了一个名为“threading.py”的文件,有人建议我删除它,我做过(或者我以为我做过)。问题是因为我使用Eclipse,Eclipse的PyDev(Python)插件只删除了我创建的threading.py文件,并隐藏了* .pyc文件。我有一个挥之不去的threading.pyc文件挥之不去,即使PyDev有一个选项,我已经启用删除孤立的.pyc文件。