我将为C/C++ HTTP/HTTPS客户端安装一个测试线束,我想使用Python来测试测试带中的服务器。Python似乎有一组非常好的TCP/HTTP服务器和处理程序类,似乎它是实现这一目标的阻力最小的路径。在
也就是说,我正在尝试如何优雅地关闭TCPServer
对象。我的测试线束是用C++编写的,我想使用^ {CD2}}来调用服务器,只是因为它不像^ {CD3}}那样有问题,而且它可以在我的所有目标平台(Windows、OSX、Linux)上都可用。假设我使用popen()
来启动python服务器,那么python进程的PID将不可用,因此我无法轻松地SIGTERM
服务器。在
我想我应该向服务器进程的STDIN发送一个'q'字符,或者关闭发送它的服务器的STDIN管道,让它正常关闭。我就是想不出一个好办法。在
TCPServer
/HTTPServer
/等在您调用他们的.serve_forever()
方法时开始工作。因此,当我调用一个名为.serve_forever()
的方法时,要让{BaseHTTPServer
的python文档建议重复调用.handle_request()
:
def run_while_true(server_class=BaseHTTPServer.HTTPServer,
handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
"""
This assumes that keep_running() is a function of no arguments which
is tested initially and after each request. If its return value
is true, the server continues.
"""
server_address = ('', 8000)
httpd = server_class(server_address, handler_class)
while keep_running():
httpd.handle_request()
但这也不是很好的工作-它依赖于服务器接收并完成一个请求来检查是否继续运行-如果服务器没有收到请求,它就不会从.handle_request()
返回。在
TCPServer
是否有一个名为^{
这条线安全吗?我知道GIL,但我仍然想知道,考虑到PyPy等其他python实现,这是否被认为是正确的选择。我可以在另一个线程上等待STDIN,然后在STDIN上获得EOF时安全地调用TCPServer
的{
是的,
BaseServer.shutdown()
方法是线程安全的。在serve_forever
方法在设置shutdown标志之前一直有效,设置该标志是shutdown()
的任务。该方法在docstring中声明:请注意,这与GIL无关;这只限制了Python进程在C扩展和I/O之外可以有效使用的内核数量
相关问题 更多 >
编程相关推荐