Python:在后台运行脚本并进行输入/输出

Python:在后台运行脚本并进行输入/输出,python,scripting,memcached,Python,Scripting,Memcached,我需要做的脚本将在后台运行,脚本将始终打开连接到memcached服务器,并等待从其他程序获取参数,当reciveparametar脚本将做一些工作,并输出一些信息回第一个程序。 我最大的问题是如何让脚本在后台运行并等待参数 如果不知道您是如何从其他程序获取参数的,或者您是如何等待的,就很难给出具体的答案 但是为了说明起见,让我们假设它正在侦听到端口6789的TCP连接,而另一个程序只是连接到该套接字并发送固定数量的参数,以换行符分隔 最简单的方法是阻止: memcache_connection

我需要做的脚本将在后台运行,脚本将始终打开连接到memcached服务器,并等待从其他程序获取参数,当reciveparametar脚本将做一些工作,并输出一些信息回第一个程序。
我最大的问题是如何让脚本在后台运行并等待参数

如果不知道您是如何从其他程序获取参数的,或者您是如何等待的,就很难给出具体的答案

但是为了说明起见,让我们假设它正在侦听到端口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()

如果您想执行所谓的多线程,请阅读python文档中的内容,或者自己尝试:

import threading

它是如何从其他程序获取参数的?从套接字?很快我忘了说,我用简单的命令行传递参数“/app.py--information”,我预计在一秒钟内会有1000-2000个参数(发送到该脚本中)…当脚本已经运行时,如何在命令行上传递参数?那没有任何意义。当然,您可以编写驱动程序脚本(保持在后台运行)和控制脚本,例如
httpd
apachectl
,甚至可以将它们合并到同一个脚本中(因此它充当具有一组参数的驱动程序,以其他方式控制现有驱动程序),但这听起来不像你的建议。另外,当你说“我预计大约有1000-2000个参数”时,你的意思是2000个命令行参数吗?“当脚本已经运行时,如何在命令行上传递参数?”这就是我为什么在这里发帖的原因:)不知何故,我需要制作一个脚本来接收一些信息并传回一些其他信息。我的意思是每秒1000-2000次点击/请求。你能给我一些更好的主意吗?插座在我的位置不好。