Python实现常驻进程接收外部参数的Server-Client方案
本文介绍如何在Python中实现一个常驻进程以接收外部传入的参数。通过构建基于Socket的Server-Client架构,服务端利用多线程处理并发连接,解析客户端发送的数据并执行相应逻辑;客户端支持从命令行直接传入参数或读取文件内容发送请求。该方案实现了持久化运行与动态参数交互的结合,适用于需要持续监听并处理外部指令的场景。
Python常驻进程接收外部参数的方案概述
编写一个简单的Python常驻进程并不困难,只需使用一个无限循环即可。然而,若要求该进程能够实时接收并处理来自外部的参数,实现复杂度便会相应增加。
针对这一需求,首先考虑采用网络编程中经典的Server-Client(服务器-客户端)架构模式。
在此模式下,Server端作为常驻进程运行,负责监听并接收由Client端发送的各类参数,进而执行相应的处理逻辑。
服务端Server.py代码实现与解析
以下是服务端的核心代码实现,文件名为server.py。
import sockets = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 10001))
s.listen(5)
def do_some():
pass
def do_other():
pass
def tcplink(sock, addr):
print('Accept new connection from %s:%s...' % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
data_str = data.decode('utf-8')
data_list = data_str.split(',')
if len(data_list) == 3:
do_some()
else:
do_other()
sock.send(('processing, %s!' % s3).encode('utf-8'))
sock.close()
if __name__ == '__main__':
while True:
# 接受一个新连接:
data, addr = s.accept()
# 创建新线程来处理TCP连接:
t = threading.Thread(target=tcplink, args=(data, addr))
t.start()
客户端Client.py实现与参数传递机制
服务端逻辑完成后,接下来实现客户端代码client.py。该客户端支持两种参数传入方式:一是直接从命令行传入参数,二是从指定文件中读取参数,随后向服务端发起请求。
import socket
import sys
if __name__ == '__main__':
param = sys.argv[1]
c_list = []
if param.endswith('txt'):
with open(param, 'r') as file:
for line in file.readlines():
c_list.append(line.strip().encode('utf8'))
else:
c = param.encode('utf8')
c_list.append(c)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 10001))
print(s.recv(1024).decode('utf-8'))
for data in c_list:
s.send(data)
print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()
通过这两个脚本的配合,一个负责保持常驻状态,另一个负责传递参数,系统即可持续接收并处理来自外界的请求。
以上即为本文的全部内容,希望对读者的学习有所帮助,也欢迎大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













