- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Python 3.6 中针对进程间通信进行了以下设置:
from multiprocessing.managers import BaseManager
class MyManager(BaseManager): pass
MyManager.register('get_instance', callable=lambda:my_instance)
m = MyManager(address=('', 50000), authkey=b'key')
s = m.get_server()
s.serve_forever()
为了避免阻塞我的大型应用程序的消息循环,我使用了一个线程来包含此设置。所以 s.serve_forever()
实际上在线程的 run
函数中运行。
这是根据 documentation 完成的.并且设置本身与调用共享实例的客户经理配合得很好。
但是,我找不到停止这个“serve_forever”服务器的方法。由于文档没有提到这一点,我检查了 source code .有一个 stop_event
,据说我可以 set
退出循环。但它不起作用,因为 accepter
守护进程/线程仍在运行。而且我无法在服务器对象上调用 shutdown
,因为我没有套接字对象 c
。
那么我该如何关闭这个服务器呢?
附言。使用 BaseManager.start()
对我来说并不是一个真正的选择,因为在我的例子中,服务器共享一个只能由启动进程访问的异步消息循环。 BaseManager.start()
生成一个新进程,该进程不再访问消息循环。 get_server().serve_forever()
另一方面,在调用进程中运行。
最佳答案
在服务器中试试这个:
import threading
s = m.get_server()
stop_timer = threading.Timer(1, lambda:s.stop_event.set())
MyManager.register('stop', callable=lambda:stop_timer.start())
s.serve_forever()
在客户端:
MyManager.register('stop')
m.stop()
更新:
我通过使用 threading.Timer
延迟 stop_event.set()
解决了超时问题
旧:
但是,在机器之间,由于 stop()
方法无法接收数据,您会遇到长时间超时,这个答案谈到了这一点 - 但我无法让它工作:
properly disconnect multiprocessing remote manager
我是多处理管理器的新手,如果我找到更好的解决方案,我会更新这个答案。 (更新:找到,更新)
关于python - 停止 Python Multiprocessing BaseManager 'serve_forever' 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44940164/
这个问题在这里已经有了答案: Python not printing output (1 个回答) 关闭 2 个月前。 我有以下小的 python 脚本来运行本地服务器来测试一些 html: pri
我正在用 Python3 编写一个非常简单的应用程序,它只是根据通过 Python http.server.BaseHTTPRequestHandler、HTTPServer 模块接收到的 POST
我正在使用 Python 中的 SocketServer 模块在我的应用程序中实现一个简单的嵌入式 Web 服务器。目前,我正在专用线程中调用 serve_forver 方法,以便继续执行我的应用程序
我知道socketserver有一个方法shutdown()这会导致服务器关闭,但这仅适用于多线程应用程序,因为关闭需要从与 serve_forever() 所在的线程不同的线程调用正在运行。 我的应
我正在一个单独的线程中运行我的 HTTPServer(使用无法停止线程的线程模块...)并且希望在主线程也关闭时停止服务请求。 Python 文档指出 BaseHTTPServer.HTTPServe
我在 Python 3.6 中针对进程间通信进行了以下设置: from multiprocessing.managers import BaseManager class MyManager(Base
异步流的 Python 3.7 文档包括 TCP echo server example : import asyncio async def handle_echo(reader, writer):
我正在尝试在同一个 python 应用程序中运行一个 websockets 服务器和一个 http 服务器。看起来我正在尝试运行两个永远的循环,而第二个循环没有被激活。关于如何让这两个服务器运行的任何
我已经创建了一个 Flask 应用程序并开始构建我的项目,但是当我在任何文件中使用断点进行调试时,vscode 将自动停止在 flask default 中的 HTTPServer.serve_for
我是一名优秀的程序员,十分优秀!