Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 扭曲试验在两次试验之间悬而未决_Python_Twisted_Trial - Fatal编程技术网

Python 扭曲试验在两次试验之间悬而未决

Python 扭曲试验在两次试验之间悬而未决,python,twisted,trial,Python,Twisted,Trial,我是twisted的新手,我正在尝试使用试用测试框架编写一些单元测试。我的测试按预期运行并通过,但由于某些原因,测试之间挂起了试用。我必须在每次测试后按CTRL+C,才能让它进入下一个测试。我猜我有一些配置不正确的地方,或者我没有调用我应该调用的方法来告诉试用测试已经完成 下面是正在测试的类: from twisted.internet import reactor, defer import threading import time class SomeClass: def doS

我是twisted的新手,我正在尝试使用试用测试框架编写一些单元测试。我的测试按预期运行并通过,但由于某些原因,测试之间挂起了试用。我必须在每次测试后按CTRL+C,才能让它进入下一个测试。我猜我有一些配置不正确的地方,或者我没有调用我应该调用的方法来告诉试用测试已经完成

下面是正在测试的类:

from twisted.internet import reactor, defer
import threading
import time


class SomeClass:
   def doSomething(self):
      return self.asyncMethod()

   def asyncMethod(self):
       d = defer.Deferred()
       t = SomeThread(d)
       t.start()
       return d


class SomeThread(threading.Thread):
    def __init__(self, d):
        super(SomeThread, self).__init__()
        self.d = d

    def run(self):
        time.sleep(2) # pretend to do something
        retVal = 123
        self.d.callback(retVal)
以下是单元测试类:

from twisted.trial import unittest
import tested


class SomeTest(unittest.TestCase):
    def testOne(self):
        sc = tested.SomeClass()
        d = sc.doSomething()
        return d.addCallback(self.allDone)

    def allDone(self, retVal):
        self.assertEquals(retVal, 123)

    def testTwo(self):
        sc = tested.SomeClass()
        d = sc.doSomething()
        return d.addCallback(self.allDone2)

    def allDone2(self, retVal):
        self.assertEquals(retVal, 123)
这是命令行输出的外观:

me$ trial test.py 
test
  SomeTest
    testOne ... ^C                                                           [OK]
    testTwo ... ^C                                                           [OK]

-------------------------------------------------------------------------------
Ran 2 tests in 8.499s

PASSED (successes=2)
我想你的问题与你的线程有关。Twisted不是线程安全的,如果需要与线程进行接口,应该让reactor通过使用
deferToThread
callInThread
callFromThread
来处理事情。 有关如何使用Twisted实现线程安全的信息,请参阅。

我想您的问题与线程有关。Twisted不是线程安全的,如果需要与线程进行接口,应该让reactor通过使用
deferToThread
callInThread
callFromThread
来处理事情。
有关如何使用Twisted实现线程安全的信息,请参阅。

为什么要使用
线程
?您可能应该使用的问题似乎与睡眠和线程有关。如果我不穿衣服出去睡觉,它就会工作。我还通过完全去掉线程并使用reactor.callLater()实现了它。有人能解释为什么线程会导致这个问题吗?我只是想模拟一个长操作,比如数据库查询。我尝试使用deferToThread(),这也很有效。谢谢你的提示。你为什么要使用
线程
?您可能应该使用的问题似乎与睡眠和线程有关。如果我不穿衣服出去睡觉,它就会工作。我还通过完全去掉线程并使用reactor.callLater()实现了它。有人能解释为什么线程会导致这个问题吗?我只是想模拟一个长操作,比如数据库查询。我尝试使用deferToThread(),这也很有效。谢谢你的指点。