我尝试用 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(使用前将#替换为@)