Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带线程的奇怪django ORM行为_Python_Django_Multithreading - Fatal编程技术网

Python 带线程的奇怪django ORM行为

Python 带线程的奇怪django ORM行为,python,django,multithreading,Python,Django,Multithreading,我试图在Django项目中启动的线程中访问queryset结果,结果中出现了一些非常奇怪的情况 出现的问题是,在线程的init中,一切都正常工作,但当我完成run方法中应该相同的操作时,它们返回空。代码和结果如下所示 任何关于如何排除这种奇怪行为的想法都将不胜感激 代码: 结果: WORKS [<ReviewCustomFormEntry: ReviewCustomFormEntry object>] WORKS [<ReviewCustomFormEntry: ReviewC

我试图在Django项目中启动的线程中访问queryset结果,结果中出现了一些非常奇怪的情况

出现的问题是,在线程的init中,一切都正常工作,但当我完成run方法中应该相同的操作时,它们返回空。代码和结果如下所示

任何关于如何排除这种奇怪行为的想法都将不胜感激

代码:

结果:

WORKS [<ReviewCustomFormEntry: ReviewCustomFormEntry object>]
WORKS [<ReviewCustomFormEntry: ReviewCustomFormEntry object>]
EMPTY []
EMPTY []
WORKS "JonDykeman"
WORKS ReviewCustomFormEntry

再次感谢您,如果您阅读了Python27\lib\threading.py中thread类的文档,JD会说

If a subclass overrides the constructor, it must make sure to invoke
the base class constructor (Thread.__init__()) before doing anything
else to the thread.
所以像这样修改代码

class FinalDataCreator(threading.Thread):

def __init__(self, final_form_entry, **kwargs):

        super(FinalDataCreator, self).__init__(**kwargs) #why you need to pass **kwargs

        print "WORKS", final_form_entry.user_form_entries.all()

        self.final_form_entry = final_form_entry
        print "WORKS", self.final_form_entry.user_form_entries.all()

        self.weirdest_thing = self.final_form_entry.user_form_entries.all()

    def run(self):

        print "EMPTY", self.final_form_entry.user_form_entries.all()

        print "EMPTY", self.weirdest_thing

然后运行你的代码

嗨,我刚刚用同样的结果运行了新代码。还有其他想法吗?有没有理由将**kwargs传递给线程初始化方法。您还可以尝试先在init中初始化任何简单字符串或整数值,然后在run方法中访问它。。。比如在init:self.name=jondykeman和run:print self.name中。请让我知道resultsHi,本质上我在init中设置的任何其他内容都会被调用。似乎只有查询集被删除了。我已经使用这种方法几十次了,没有任何问题-这是一个非常奇怪和恼人的事件。
class FinalDataCreator(threading.Thread):

def __init__(self, final_form_entry, **kwargs):

        super(FinalDataCreator, self).__init__(**kwargs) #why you need to pass **kwargs

        print "WORKS", final_form_entry.user_form_entries.all()

        self.final_form_entry = final_form_entry
        print "WORKS", self.final_form_entry.user_form_entries.all()

        self.weirdest_thing = self.final_form_entry.user_form_entries.all()

    def run(self):

        print "EMPTY", self.final_form_entry.user_form_entries.all()

        print "EMPTY", self.weirdest_thing