【问题标题】:Unable to use Python's threading.Thread in Django app无法在 Django 应用程序中使用 Python 的 threading.Thread
【发布时间】:2013-01-04 18:01:09
【问题描述】:

我正在尝试创建一个 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,但这似乎有点过头了,我不明白这个例子是如何导入线程和使用 threading.Thread 的,而我不能。 谢谢。

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

【问题讨论】:

  • 线程类模块文件叫什么名字?如果您将其命名为“threading.py”,那么您将隐藏 python 线程模块。
  • 请显示实际的完整回溯。您显示的代码不会导致该错误,因为您没有导入 Thread (您会得到 AttributeError )。
  • @DanielRoseman:不,如果你选择了from threading import Thread,你得到一个看起来和他看到的一模一样的ImportError。 (但这并不会改变你的更大观点,即他向我们展示的代码不是他实际运行的代码。)
  • @abarnert 这就是我的意思,在咖啡中他表明他只做import threading,这不会给出那个错误。
  • @DanielRoseman:但你说如果他导入Thread,他会得到AttributeError。这不是真的;他会得到ImportError,就像他展示的那样。同样,这并没有改变你的更大观点,即他向我们展示的不是他正在运行的......但通常让尚未学会如何提问的人感到困惑是一个坏主意。

标签: python django multithreading django-views


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2017-09-17
    • 2021-04-08
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多