Python:在后台运行脚本并进行输入/输出
我需要写一个脚本,这个脚本会在后台运行。它会一直保持和memcached服务器的连接,等待其他程序传递参数过来。当接收到参数后,脚本就会执行一些操作,并把结果反馈给最初的那个程序。我的最大问题是,怎么让这个脚本在后台运行,并且能够等待参数的到来呢?
2 个回答
0
你想要做的事情叫做多线程。可以去Python的官方文档上看看相关内容,或者自己动手试试:
import threading
0
在不知道你是怎么从另一个程序获取参数,或者你是怎么等待的情况下,很难给出具体的答案。
不过,假设为了说明问题,你的程序在监听6789端口的TCP连接,而另一个程序只是连接到这个端口并发送固定数量的参数,参数之间用换行符分隔。
最简单的方法就是让程序一直等待:
memcache_connection = # however you set this up
sock = socket.socket()
sock.bind(('', 6789))
sock.listen(5)
while True:
conn, addr = sock.accept()
with contextlib.closing(conn) as client:
with client.makefile() as f:
param1, param2, param3 = f
result = do_memcache_stuff(memcache_connection, param1, param2, param3)
client.sendall(result)
显然,这里没有处理错误的代码,也没有其他退出的方法,除了按^C,但这些都是很容易添加的。
更重要的是,这种方式一次只能处理一个命令。如果这对你来说是个问题,你通常有两个选择:线程或者事件循环。如果你不需要在两个客户端连接之间共享信息,而且一次只需要处理几十个连接,使用线程通常会更简单。你只需要把处理程序封装成一个函数,然后启动它。这样:
def handle_client(conn):
with contextlib.closing(conn) as client:
with client.makefile() as f:
param1, param2, param3 = f
result = do_memcache_stuff(memcache_connection, param1, param2, param3)
client.sendall(result)
memcache_connection = # however you set this up
sock = socket.socket()
sock.bind(('', 6789))
sock.listen(5)
while True:
conn, addr = sock.accept()
t = threading.Thread(target=handle_client, args=(conn,))
t.daemon = True
t.start()