Omer Katz added the comment:

Capturing the signal provides the following traceback:
File "mt_example.py", line 10, in <module>
    p1 = ThreadPool()
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/pool.py",
 line 1016, in __init__
    self._result_handler.start()
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/pool.py",
 line 504, in start
    super(PoolThread, self).start(*args, **kwargs)
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/py2/dummy/__init__.py",
 line 69, in start
    threading.Thread.start(self)
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 750, 
in start
    self.__started.wait()
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 620, 
in wait
    self.__cond.wait(timeout)
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 339, 
in wait
    waiter.acquire()
  File "mt_example.py", line 6, in handler
    print(''.join(traceback.format_stack(frame)))

  File "mt_example.py", line 10, in <module>
    p1 = ThreadPool()
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/pool.py",
 line 1016, in __init__
    self._result_handler.start()
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/pool.py",
 line 504, in start
    super(PoolThread, self).start(*args, **kwargs)
  File 
"/home/omer/.virtualenvs/billiard/lib/python2.7/site-packages/billiard/py2/dummy/__init__.py",
 line 69, in start
    threading.Thread.start(self)
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 750, 
in start
    self.__started.wait()
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 620, 
in wait
    self.__cond.wait(timeout)
  File "/home/omer/.pyenv/versions/2.7.8/lib/python2.7/threading.py", line 339, 
in wait
    waiter.acquire()

The following code reproduces that traceback every time:
from billiard.pool import ThreadPool
import signal

def handler(signum, frame):
        import traceback
        print(''.join(traceback.format_stack(frame)))

signal.signal(signal.SIGTERM, handler)

p1 = ThreadPool()

class Foo(object):
    def a(self):
        print("a")
        return 1

    def do(self):
        return p1.apply_async(self.a)


foo = Foo()
r = foo.do()

print(r.get())
p1.close()
p1.join()

I'm convinced that there is a bug somewhere and it seems that Python is the 
source of the bug.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue22985>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to