2013-02-08 33 views
1

我有兩個程序 program1.py就像命令行界面,它接受用戶的命令 program2.py具有根據命令運行相關程序的程序。在一個新線程上運行python程序

方案1還具有quit_program()模塊 在我們簡單的宇宙..可以說,我只有一個命令,只是一個程序 因此,可以說...

program1.py

def main(): 
    while True: 
     try: 

      command = raw_input('> ') 
      if command == "quit" : 
       return 

      if command == '': 
       continue 
     except KeyboardInterrupt: 
      exit() 

     parseCommand(command) 

然後我有:

if commmand == "hi": 
     say_hi() 

現在程序2具有

def say_hi(): 
     #do something.. 

現在有可能出現兩種情況...... 要麼say_hi()完成在這種情況下沒有問題... 但我想要的是,如果用戶輸入命令(比如:結束) 那麼這個say_hi( )被終止之間..

但我目前的實施是非常順序的..我的意思是我沒有得到在我的終端上鍵入任何東西,直到執行完成.. Somethng告訴我say_hi()應該在運行在另一個線程?

我不能直截了當地想這件事。 有什麼建議嗎? 謝謝

回答

6

線程模塊是你在找什麼。

import threading 
t = threading.Thread(target=target_function,name=name,args=(args)) 
t.daemon = True 
t.start() 

.daemon選項,可以使您不必明確殺死線程當你的應用程序退出...線程可以說是相當討厭否則

具體到這個問題,並在評論的問題,該say_hi功能可以在另一個線程被稱爲例如:

import threading 
if commmand == "hi": 
    t = threading.thread(target=say_hi, name='Saying hi') #< Note that I did not actually call the function, but instead sent it as a parameter 
    t.daemon = True 
    t.start() #< This actually starts the thread execution in the background 

作爲一個側面說明,你必須確保你正在使用線程的內部線程安全的功能。在打招呼的例子,你可能需要使用記錄模塊,而不是打印的()

import logging 
logging.info('I am saying hi in a thread-safe manner') 

你可以閱讀更多in the Python Docs

+0

嗨..但與此..我將如何能夠在背景中運行「say_hi()」..?並仍然保持控制,以便我可以在終端中鍵入命令 – Fraz 2013-02-08 23:23:23