簡體   English   中英

Python:在后台運行腳本並執行輸入/輸出

[英]Python: run script in background and do input/output

我需要制作將在后台運行的腳本,腳本將始終打開與內存緩存服務器的連接,並希望從其他程序中獲取參數,當接收參數腳本將執行一些工作並將某些信息輸出回該第一個程序時。 我最大的問題是如何使該腳本在后台運行並等待參數設置?

在不確切知道如何從其他程序獲取參數或如何等待的情況下,很難給出具體的答案。

但是,為了說明起見,我們假設它正在偵聽到端口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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM