diff options
-rw-r--r-- | test/python/threading/wsgi.py | 33 | ||||
-rw-r--r-- | test/test_python_application.py | 13 |
2 files changed, 46 insertions, 0 deletions
diff --git a/test/python/threading/wsgi.py b/test/python/threading/wsgi.py new file mode 100644 index 00000000..adaa2a37 --- /dev/null +++ b/test/python/threading/wsgi.py @@ -0,0 +1,33 @@ +import sys +import time +import threading + + +class Foo(threading.Thread): + num = 10 + + def __init__(self, x): + self.__x = x + threading.Thread.__init__(self) + + def log_index(self, index): + sys.stderr.write( + "(" + str(index) + ") Thread: " + str(self.__x) + "\n" + ) + sys.stderr.flush() + + def run(self): + i = 0 + for _ in range(3): + self.log_index(i) + i += 1 + time.sleep(1) + self.log_index(i) + i += 1 + + +def application(environ, start_response): + Foo(Foo.num).start() + Foo.num += 10 + start_response('200 OK', [('Content-Length', '0')]) + return [] diff --git a/test/test_python_application.py b/test/test_python_application.py index 8632621c..ec59c741 100644 --- a/test/test_python_application.py +++ b/test/test_python_application.py @@ -507,6 +507,19 @@ Connection: close self.assertEqual(self.get()['body'], '0123456789', 'write') + def test_python_application_threading(self): + """wait_for_record() timeouts after 5s while every thread works at + least 3s. So without releasing GIL test should fail. + """ + + self.load('threading') + + for _ in range(10): + self.get(no_recv=True) + + self.assertIsNotNone( + self.wait_for_record(r'\(5\) Thread: 100'), 'last thread finished' + ) if __name__ == '__main__': TestPythonApplication.main() |