在单独的线程中运行 SimpleXMLRPCServer 并关闭

2024-03-17

我有一个类,我希望通过 python 中的 SimpleXMLRPCServer 进行测试。我设置单元测试的方法是创建一个新线程,并在其中启动 SimpleXMLRPCServer。然后我运行所有测试,最后关闭。

这是我的服务器线程:

class ServerThread(Thread):
    running = True
    def run(self):
        self.server = #Creates and starts SimpleXMLRPCServer

        while (self.running):
            self.server.handle_request()

    def stop(self):
        self.running = False
        self.server.server_close()

问题是,如果线程已经在等待handle_request中的请求,那么调用ServerThread.stop(),然后调用Thread.stop()和Thread.join()将不会导致线程正确停止。而且由于这里似乎没有任何我可以使用的中断或超时机制,因此我不知道如何干净地关闭服务器线程。


我遇到了同样的问题,经过几个小时的研究,我通过从使用自己的解决方案切换来解决了这个问题处理请求()循环到永远服务()启动服务器。

永远服务()启动像你一样的内部循环。这个循环可以通过调用来停止关闭()。停止循环后可以停止服务器服务器关闭().

我不知道为什么这会起作用处理请求()循环不,但它确实;P

这是我的代码:

from threading import Thread
from xmlrpc.server import SimpleXMLRPCServer
from pyWebService.server.service.WebServiceRequestHandler import WebServiceRquestHandler

class WebServiceServer(Thread):
    def __init__(self, ip, port):
        super(WebServiceServer, self).__init__()
        self.running = True
        self.server = SimpleXMLRPCServer((ip, port),requestHandler=WebServiceRquestHandler)
    self.server.register_introspection_functions()

    def register_function(self, function):
        self.server.register_function(function)

    def run(self):
        self.server.serve_forever()

    def stop_server(self):
        self.server.shutdown()
        self.server.server_close()

print("starting server")
webService = WebServiceServer("localhost", 8010)
webService.start()
print("stopping server")
webService.stop_server()
webService.join()
print("server stopped")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单独的线程中运行 SimpleXMLRPCServer 并关闭 的相关文章

  • 如何测试顶级窗口是否打开?

    我感觉 Python 编程可能不是我的菜 我创建了一个 tkinter GUI 它使用按钮回调来打开另一个窗口 其他搜索说这个窗口应该是顶级窗口 并且它工作得很好 但是每次按下按钮时它都会打开另一个相同的窗口 如据我所知 窗口 问题 如何测
  • 使用 Marshmallow 中的数据更新行 (SQLAlchemy)

    我正在使用 Flask Flask SQLAlchemy Flask Marshmallow marshmallow sqlalchemy 尝试实现 REST api PUT 方法 我还没有找到任何使用 SQLA 和 Marshmallow
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 代理阻止网络套接字?如何绕行

    我有一个用 Python 编写的正在运行的 websocket 服务器 来自https github com opiate SimpleWebSocketServer https github com opiate SimpleWebSoc
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 如何通过facebook-sdk python api获取用户帖子?

    我使用 facebook jssdk 授权我的应用程序读取用户个人资料和用户帖子 FB login function response scope user status user likes user photos user videos
  • Docker:通过 Gunicorn 运行 Flask 应用程序 - Worker 超时?表现不佳?

    我正在尝试创建一个用Python Flask编写的新应用程序 由gunicorn运行 然后进行dockerized 我遇到的问题是 docker 容器内的性能非常差 不一致 我最终得到了响应 但我不明白为什么性能会下降 有时我会在日志中看到
  • Python/Flask:应用程序在关闭后正在运行

    我正在开发一个简单的 Flask Web 应用程序 我使用 Eclipse Pydev 当我开发该应用程序时 由于代码更改 我必须经常重新启动该应用程序 这就是问题所在 当我运行该应用程序时 我可以在本地主机上看到该框架 这很好 但是当我想
  • 获取 zeep.exceptions.ValidationError:缺少与 suds 一起使用的方法的元素

    我正在移植开发的代码suds 0 6到zeep 2 4 0 以前的泡沫代码 client Client WSDLfile proxy proxy faults True config client factory create perUse
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • 如何在 Numpy 中实现垃圾收集

    我有一个名为main py 它引用另一个文件Optimisers py它仅具有功能并用于for循环进入main py 这些函数都有不同的优化功能 This Optimisers py然后引用另外两个类似的文件 其中也只有函数 它们位于whi
  • 如何在 Tkinter 的 Button 小部件中创建多个标签?

    我想知道如何在 Tkinter 中创建具有多个标签的按钮小部件 如下图所示 带有子标签的按钮 https i stack imgur com jOZRw jpg正如您所看到的 在某些按钮中有一个子标签 例如按钮 X 有另一个小标签 A 我试
  • if/else 在 while 循环内正确缩进[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我开始学习 Python 编程大约几周了 我遇到了一些麻烦 下面的代码是一个小程序 用于检查列表中是否有偶数 如果找到第一个偶数
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • 带有整数的 np.sqrt 和 where 条件返回错误结果

    当我将 numpy sqrt 方法应用于带有 a 的整数数组时 我得到了奇怪的结果where健康 状况 见下文 对于整数 a np array 1 4 9 np sqrt a where a gt 5 Out 3 array 0 0 5 3
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo

随机推荐

  • 如何在 Spring 中管理对象池?

    据我了解 在 Spring 中 所有对象默认都被视为单例 如果 singleton 设置为 false 则每个请求都会提供一个新对象 但是如果我想池化对象怎么办 假设设置范围从最少 1 到最多 10 个实例 使用 Spring 可以吗 池化
  • 我的 AndroidManifest.xml 中声明的活动的 ActivityNotFoundException

    我有一个启动的 Android 应用程序 大部分时间都运行良好 然而 在大约 1000 多次运行中 有 1 次我收到 android content ActivityNotFoundException 无法找到显式活动类异常 该活动已在我的
  • 将所有“\n”替换为“,”

    我有一个文本区域 我想将其值中的 n 替换为 var valuetxtarr txtarr val var valuetxtarrs valuetxtarr replace n g alert valuetxtarrs 但它不起作用 为什么
  • 是否可以在 PYTHON 的一个命令中对多个字符串使用 .count ?

    我想知道是否可以使用 count 函数对多个字符串进行计数 string abcdefg string count or 当我使用 or 命令时 它只给出 1 个变量的计数 但我想要总数 如何将它组合起来 使其计入 2 个字符串 而不将其拆
  • 自定义 Lint 检查未运行

    我目前正在尝试编写我正在处理的自定义 lint 检查 我创建了一个单独的 java 项目并将其作为 jar 包含在内 我的问题是 无论如何 在分析我的代码库时 似乎我的自定义检查没有运行 我已经包含了一个注册表 class MyIssueR
  • 检测堆栈溢出

    操作系统如何检测用户空间程序的堆栈溢出 然后将 SIGTERM 或 SIGSEGV 发送到这些用户空间程序 防护页 当操作系统为程序创建堆栈时 它将分配比指定的多一点的空间 内存按页分配 通常每页 4KB 并且额外的页将进行设置 以便任何访
  • 从 CGImage 获取像素格式

    我非常了解位图布局和像素格式主题 但在处理通过加载的 png jpeg 图像时遇到问题NSImage 我无法弄清楚我得到的是预期行为还是错误 let nsImage NSImage NSImage byReferencingURL let
  • Pylint 无法与 OS X 上的 Emacs GUI 一起使用;从命令行工作

    从命令行运行时 emacs filename py flymake 和 pylint 完美配合 错误被正确突出显示 尽管我无法通过工具提示悬停来获取错误详细信息 因为它是文本模式 当从 GUI Carbon Emacs 运行时 Flymak
  • 如何防止TouchEvent滚动

    我有一个自定义视图 其中具有触摸事件 滑动等 的功能 现在 这个自定义视图可能会在一个ScrollableLayout 那么问题是 当用户在我的自定义视图内滑动时 父级 可滚动布局 也将处理滑动手势 因此它会滚动 但它不应该滚动 我需要类似
  • 如何一次在目录中的多个文本文件中搜索文本字符串

    我有一个列表框 其中包含一定数量的项目 对于列表框中的每个项目 文件目录中都存在一个相应的文本文件 我需要在每个文本文件 基于列表框中的内容 中搜索人名 每个文本文件可能包含名称 也可能不包含名称 然后我想要返回包含该名称的文本文件 我尝试
  • 检测 powershell 中的注销和登录

    如何使用powershell检测用户是否从windows系统 最好是win7 vista或XP 登录或注销 我想注册每次登录和注销机器的日期和时间 先感谢您 您可以从事件日志中获取此信息 Get EventLog System Source
  • 签署程序集 - 基础知识

    签署集会意味着什么 为什么这样做 最简单的签名方法是什么 snk 文件有什么用 其他两个答案都很好 但还有一点 证书 签名和 强名称 签名很容易混淆 正如 Stefan Steinegger 所说 强名称签名的目的是 让您的客户确定他们认为
  • 如何使 Xamarin.Mac 应用程序“登录时打开”?

    我有一个 Xamarin Mac 应用程序需要在登录时自动打开 如何让我的应用程序获得此设置而无需手动单击它 我可以给你一个如何以编程方式完成的提示 对于这种方法 您需要通过以下方式调用本机库DllImport 以下代码将让您了解如何继续
  • 如何使我的类上的自定义事件消费成为可选?

    当我注释掉fm OnLoaded下面一行 它给我一个错误 OnLoaded 为空 如何使我的类的调用者可以选择是否像 NET 类 事件一样使用该事件 using System using System Windows namespace T
  • set_time_limit 在 Heroku 上不起作用

    我正在使用 PHP 和 heroku 由于某些数据库插入和查询 我不断收到请求超时错误 我将此行添加到我的所有 php 文件中以避免此错误 set time limit 0 但是 我仍然收到此错误 heroku 会忽略这个命令吗 我做了一个
  • 谷歌应用程序引擎中的选择属性

    平台 django 1 0 谷歌应用程序引擎 app engine patch python 2 5 4 我正在尝试使用 Choice 属性 就像我一直在 django 网站中使用的那样 STATUS CHOICES 1 Yet To St
  • 无法使用 GetManifestResourceStream() 加载清单资源

    我使用 XSD 创建了一个自定义配置部分 为了解析遵循这个新架构的配置文件 我使用以下内容加载资源 我的 xsd 文件 public partial class MonitoringConfiguration public const st
  • 如何使用Python进行大规模开发?

    我有兴趣了解 Python 的大规模开发 特别是如何维护大型代码库 当您对方法的签名进行不兼容的更改时 如何找到调用该方法的所有位置 在C Java中 编译器会为你找到它 那么在Python中你如何做到这一点呢 当您在代码深处进行更改时 由
  • 使用自动更新计数器保持 $SESSION 活动

    我希望将会话保持三天 并且每当他们访问该页面时 它就会再次更新最多三天 基本上 如果他们三天不访问该网站 他们的会话就会下降 ini set session cookie lifetime 60 60 24 3 saw on a simil
  • 在单独的线程中运行 SimpleXMLRPCServer 并关闭

    我有一个类 我希望通过 python 中的 SimpleXMLRPCServer 进行测试 我设置单元测试的方法是创建一个新线程 并在其中启动 SimpleXMLRPCServer 然后我运行所有测试 最后关闭 这是我的服务器线程 clas