擅长:python、mysql、java
<p>1.1。问题:</p>
<ul>
<li>信号处理程序将中断主线程,导致<a href="https://en.wikipedia.org/wiki/Deadlock" rel="nofollow">deadlock</a>。你知道吗</li>
</ul>
<p/>
<p>1.2。解决方案:</p>
<ul>
<li>使用布尔值而不是锁。你知道吗</li>
</ul>
<p/>
<p>2.1。问题:</p>
<ul>
<li>当线程被中断时,它可能会停止不稳定的中间操作(即<code>time.sleep</code>)。你知道吗</li>
</ul>
<p/>
<p>2.2。解决方案:</p>
<ul>
<li>为了获得更高的稳定性,请将目标代码包装到子流程中。你知道吗</li>
</ul>
<p>你知道吗</p>
<p><strong>提供所需结果的通用实现:</strong></p>
<pre><code>import threading, signal
def huphandler(signum, frame):
print idle_loop.sig_lock
if idle_loop.sig_lock:
idle_loop.continuee = False
else:
print 'dont b here'
os._exit(0)
def loop():
print 'in lock'
time.sleep(5)
def idle_loop():
while True:
idle_loop.sig_lock = True
t = multiprocessing.Process(target=loop)
t.start()
t.join()
print 'out lock'
if idle_loop.continuee:
idle_loop.sig_lock = False
time.sleep(5)
else: return
idle_loop.sig_lock = False
idle_loop.continuee = True
signal.signal(signal.SIGHUP, huphandler)
idle_loop()
</code></pre>