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

标签 python multithreading tcpserver

我尝试用 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

在单独的线程中运行 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()
    ...

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

关于python - 如何将tcp服务器放在python中的另一个线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8020287/

相关文章:

JavaFX计时器线程问题

Ruby tcpserver 客户端服务器

python - Python 中的 UTF-32

python - 掩码 n 维 numpy 数组(以节省内存)

python - 与空间建立适当的联系

c++ - boost::asio::io_service async_write 在执行 async_read 时循环

node.js - 连接到 azure 虚拟机上的 Node.js 服务器

python - 验证码识别最佳实践

python - 如何启动两个线程并在运行前锁定它们,并且仅在解锁时才执行?

python - 多个线程可以使用同一个端口吗