2013-07-11 51 views
1

在哪裏可以看到控制進程的最佳實踐。控制python進程的好方法

具體而言,我想知道如何給關機命令。我正在考慮一個全局布爾值,每個進程輪詢

同時也是一種很好的方式來傳遞數據往返於活動進程之間和之間。

我還沒有發現任何好的博客文章,他們大多是如何渡

回答

2

全球布爾的想法是相當不錯的,但你不能在進程間共享。但是您可以在每個子流程中保留該布爾值的副本。

一種方法是將pipes and/or queues與線程一起使用。類似的東西:

from multiprocessing import Process, Pipe 
from threading import Thread 

Alive = True  

def listener_thread(conn): 
    global Alive 
    while True: 
     data = conn.recv() 
     if data == "kill": 
      Alive = False 
      break 

def subprocess(conn): 
    t = Thread(target=listener_thread, args=(conn,)) 
    t.start() 
    while Alive: 
     # do some stuff here 

if __name__ == '__main__': 
    parent_conn, child_conn = Pipe() 
    p = Process(target=subprocess, args=(child_conn,)) 
    p.start() 
    # do some stuff 
    parent_conn.send("kill") 
    p.join() 

請注意,您將需要每個子進程(parent_conn, child_conn)對。這是流程和子流程之間溝通的標準方式。或者你可以使用數據庫(和數據庫我的意思是任何數據庫,即使是一個簡單的文件)在進程之間共享數據。但是,您將需要一個輪詢線程,可能不是有效的。

你也可以使用一些pub/sub系統(這樣你就不用擔心輪詢效率),就像Redis一樣,根據你的需要可能是最好的。

一般來說,流程越少越好。

+0

奇特非常感謝你!從字面上看,一切都很清楚,感謝您抽出寶貴時間 –