如何在python中将tcp服务器放在另一个线程上

2024-03-10

我尝试用 python 编写一个守护进程。但我不知道如何使用线程在这个守护进程中启动并行 tcp 服务器。甚至我应该使用什么类型的服务器:asyncore?SocketServer?socket?

这是我的代码的一部分:

import os
def demonized():
   child_pid = os.fork()
   if child_pid == 0:
       child_pid = os.fork()
       if child_pid == 0:          #fork twice for demonize
           file = open('###', "r") # open file
           event = file.read()
           while event:
               #TODO check for changes put changes in list variable
               event = file.read()
       file.close()
       else:
           sys.exit(0)
   else:
       sys.exit(0)


if __name__ == "__main__":
  demonized()

因此,在循环中,我有一个列表变量,每个循环都附加一些数据,我想启动一个带有 TCP 服务器的线程,该线程在循环中等待连接,如果客户端连接,则向其发送此数据(带有归零变量)。所以我不需要处理多个客户端,客户端一次只有一个。实现这一点的最佳方法是什么?

谢谢。


如果您想避免重复样板文件,Python 很快就会有一个标准模块来执行以下操作fork()对和标准 I/O 操作(您还没有将其添加到您的程序中吗?),使其成为守护进程。您现在可以从以下位置下载并使用该模块:

http://pypi.python.org/pypi/python-daemon http://pypi.python.org/pypi/python-daemon

在单独的线程中运行 TCP 服务器通常很简单:

import threading

def my_tcp_server():
    sock = socket.socket(...)
    sock.bind(...)
    sock.listen()
    while True:
        conn, address = sock.accept()
        ...
        ... talk on the connection ...
        ...
        conn.close()

def main():
    ...
    threading.Thread(target=my_tcp_server).start()
    ...

我强烈推荐against尝试让您的文件读取器线程和套接字应答线程与您自己设计的列表和锁进行通信;这样的计划很难开始发挥作用,也很难继续发挥作用。相反,使用标准库的Queue.Queue()类为您正确执行所有锁定和附加操作。

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

如何在python中将tcp服务器放在另一个线程上 的相关文章

随机推荐

  • 如何在 Jasmine 测试中测试 $scope.$on 事件?

    我正在对控制器进行单元测试 并且想测试事件处理程序 假设我的控制器看起来像 myModule controller MasterController scope function scope scope on locationChangeS
  • 如何捕获无线路由器的原始信号?

    我现在看到了几个项目 它们从典型无线路由器收集的无线电数据中获取新颖的空间信息 http wisee cs washington edu http wisee cs washington edu http www extremetech c
  • HERE SDK 在 Android 8 上无法在后台使用

    HERE SDK 尝试启动它的MapService当消费者致电时内部MapEngine init 由于 Android 8 后台执行限制 如果出现以下情况 则会失败MapEngine将从后台服务初始化 有什么办法可以初始化吗MapEngin
  • Python安装libs文件夹中的python3.lib和python3x.lib有什么区别?

    我一直在编译 C 库 并链接 Python3 库文件以进行 Python 绑定 我一直使用 python39 lib 文件作为链接 但我想知道 版本化 数字 例如 python3x lib 与非版本化数字 python3 lib 之间有什么
  • Chrome 85 Service Worker 一直在尝试安装

    在我的 Web 应用程序上更新 chrome 85 后 Service Worker 不再安装 它在 chrome 84 或更早版本 Safari Firefox Microsoft Edge 浏览器上运行良好 尝试查找更改日志或错误报告
  • vue vite动态组件导入

    我正在将现有的 laravel ineria 从 mix 迁移到 vit 我完成了迁移指南中的所有步骤 除了一件事之外 一切正常 我有一个组件接收一个包含组件数组的道具 我曾经这样要求它们 在循环内 this options compone
  • BSD md5 与 GNU md5sum 输出格式?

    任何人都知道为什么 BSD md5 程序会产生这种格式的哈希输出 MD5 checksum md5 9eb7a54d24dbf6a2eb9f7ce7a1853cd0 而 GNU md5sum 会产生像这样更合理的格式 9eb7a54d24d
  • iOS 图表 - 单个值不显示 Swift

    当我在折线图上的一条线的数组中有多个点时 一切都会完美显示 但当只有一个点时 该点就不会显示 我不知道为什么 代表被设置在其他地方 但这似乎不是问题 以下示例显示了测试 2 和测试练习 第一个图像中每个图像都有一个值 第二个图像中每个图像都
  • 如何获取给定一天的本周的所有日期时间实例?

    给定一天 我想获取该天所在星期的所有天 日期时间实例 我有一个解决方案 如果有问题请纠正我是否存在更有效的方法 gt gt gt import datetime gt gt gt today datetime datetime 2013 0
  • Spring Boot 处理 SizeLimitExceededException

    我使用 Spring boot 1 5 7 我还没有配置 CommonsMultipartResolver 因为 Spring Boot 已经处理文件上传了 如果我的上传超过允许的最大大小 则会抛出一个丑陋的异常 这是由我的控制器处理的 C
  • Makefile :自动编译所有c文件,将.o文件保存在单独的文件夹中

    我所拥有的是一个包含 3 个子目录的目录 src 用于 c 和 h 文件 bin 是编译后的可执行文件应该存放的位置 obj 是我希望 obj 文件存放的位置 现在我希望 makefile 编译 src 中的每个 c 文件 无需将它们全部列
  • 我怎样才能用python挤出一个stl

    我正在尝试转换png图像转 3Dstls 我终于找到了一种方法来做到这一点 但有一个问题 现在导出的图像没有 z 值 也没有厚度 我这样做的方式是针对图像上的白色像素 将三角形绘制到表面上 def define faces numpy ar
  • XSL:FO float 用于显示页边注释 - 破坏文档

    我有一份大型中世纪手稿 已转录为 XML 使用 TEI 模式 我正在使用 xsl fo 和 Apache FOP 处理 PDF 该文件是使用嵌套构造的 p p
  • 更新 Github 上分叉存储库的多个分支

    我有一个分叉的 github 存储库 称为 repo O 称为我的分叉 repo F 其中包含大约 8 个分支 其他贡献者已在 repo O 的多个分支上对 repo O 进行了多次 100 次 提交 我现在想将这些更改放入我的分叉存储库
  • 使用强制布局避免 d3.js 中链接纵横交错/重叠

    如何使用强制布局避免 d3 js 中的链接重叠 我将屏幕分为两半 上半部分节点使用链接连接到下半部分节点 有时链接会纵横交错 我该如何避免这种情况 简短的回答是你不能 更长的答案是 D3 实现的力布局对于防止重叠链接没有任何作用 并且没有可
  • 如何检查 url 是否加载到 webview 中

    我使用下面的代码在 android webview 中加载 url webviewShowPost loadUrl URL 我想检查是否没有可用的数据连接 然后 webview 可以显示没有连接的 Toast 而不是显示空白视图 Thank
  • 推送通知徽章自动递增

    我一直在为我的应用程序实现推送服务 并且我一直在考虑应用程序的徽章 我的应用程序是一个邮件应用程序 有点 我想通过推送通知用户添加到收件箱的新消息 我想要徽章 收件箱中的新消息数 我想在服务器端 提供商 检查新消息并将数字作为徽章发送 问题
  • 尝试在测试中运行 Rails c 时将 config.eager_load 设置为 nil

    我正在尝试运行轨道 4 1 2 安慰 rails c RAILS ENV test 我得到这个 gt config eager load is set to nil Please update your gt config environm
  • 如何在 osx 上安装 pycairo?

    我正在尝试安装pycairo http cairographics org pycairo Python 绑定开罗图形库 http cairographics org 在 OSX 下 我开始于 easy install pycairo 并得
  • 如何在python中将tcp服务器放在另一个线程上

    我尝试用 python 编写一个守护进程 但我不知道如何使用线程在这个守护进程中启动并行 tcp 服务器 甚至我应该使用什么类型的服务器 asyncore SocketServer socket 这是我的代码的一部分 import os d