python - 如何关闭多处理连接侦听器?
问题描述
我需要多处理方面的帮助。我很新,我主要是在尝试一些东西。所以我有这个监听器正在监听输入。我想在关机时优雅地关闭程序,但由于程序卡在 listener.accept() 处,我无能为力。
listener = multiprocessing.connection.Listener(('localhost', 6000))
def exit_gracefully():
print("test")
listener.close()
# Do cleanup and exit
signal.signal(signal.SIGTERM, exit_gracefully)
while True:
conn = listener.accept()
# Do stuff.
我将 sigterm 发送到该过程,但我从未看到“测试”被打印出来。请帮帮我。
解决方案
首先,您应该发布了一个最小的、可重现的示例,这意味着我应该能够复制、粘贴和运行您的代码,而无需进一步重现您的问题。但是您显然缺少必需的import
陈述。我特意把这个告诉你,作为你未来帖子的第一次海报。
类multiprocessing.connection.Listener
被各种类使用。问题是您在没有人说话的端口上创建了一个侦听器!您应该注册一个在 Python 退出时调用的函数,atexit.register
用于处理任何原因的终止。处理SIGTERM
要求kill
向进程发送 Unix/Linux 命令。
import atexit
import signal
import time
import sys
def exit_gracefully():
print("test")
def ctrl_c_hit(*args, **kwargs):
print('CTRL-c hit!')
sys.exit(0)
atexit.register(exit_gracefully)
# intercept CTRl-c
signal.signal(signal.SIGINT, ctrl_c_hit)
print('Enter CTRL-c to terminate ...')
while True:
time.sleep(1_000_000)
如果输入CTRL-C
,您将看到:
Enter CTRL-c to terminate ...
CTRL-c hit!
test
推荐阅读
- arrays - 如何将数组中的 Int 导入字符串?
- flutter - 检索数据和产品页面 Firestore 时出现提供程序错误
- mysql - JSON_EXTRACT path generated from JSON_SEARCH with 'all ' mode is NOT working
- performance - 当等价做和不匹配时改进leftJoin嵌套mapObject
- django-models - 从另一个字段获取 django 模型字段
- f# - When to use Async.RunSynchronously, Async.map or let
- lua - Can't clone sword into player backpack [FIXED]
- android - Save Data from RecyclerView into SQLite DataBase
- react-native - React consume Graphql API - Network request
- mongodb - 如何将mongodb go驱动的primitive.Timestamp类型转换回Golang time.Time类型?