<p>我花了大约一天的时间来寻找一个好的答案,下面是我此刻的想法:</p>
<p>可以使用信号向进程指示需要进行某些更改,但是在我正在处理的更复杂的遗留代码库中,它会导致进程崩溃。信令基于<a href="https://docs.python.org/2/library/signal.html" rel="nofollow noreferrer" title="python signal docs">python signal docs</a>中断各种I/O进程。您可以使用<code>signal.SIGUSR1</code>实现信号处理程序</p>
<pre><code>import signal
def signal_handler(signum, stack):
print('Signal %d received'%signum)
signal.signal(signal.SIGUSR1, signal_handler)
</code></pre>
<p>这段代码可以在Linux等中触发。通过:</p>
^{pr2}$
<p>我现在倾向于使用<a href="https://kazoo.readthedocs.io/en/latest/" rel="nofollow noreferrer">kazoo</a>Python Zookeeper库。它需要以<a href="https://zookeeper.apache.org/" rel="nofollow noreferrer">Zookeeper</a>作为基础设施。在</p>
<p>在我的例子中,我确实需要切换配置值。但是Zookeeper支持许多处理器间通信工具,这些工具将满足您的需要。在</p>
<p>更新:
最后我决定使用一个命名管道(FIFO),在线程中使用<code>readline</code>调用它。在</p>
<pre><code> if not os.path.exists(fifo_name):
os.mkfifo(fifo_name)
while True:
with open(fifo_name, 'r') as config_fifo:
line = config_fifo.readline()[:-1]
print(line)
</code></pre>
<p>我使用<code>tempfile.gettempdir()</code>来找到一个好的位置来将FIFO放入文件系统。但是,它需要相当多的改进,因为我不关心解析传递的内容,而您可能会这样做。另外,如果您计划让事件有多个消费者,那么您将只将其传播到一个消费者,因为它是一个队列。在</p>