在新线程上运行python程序

时间:2013-02-08 23:14:56

标签: python

我有两个程序 program1.py就像命令行界面,它接受用户的命令 program2.py具有根据命令运行相关程序的程序。

程序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()

现在program2已经

   def say_hi():
      #do something..

现在可能有两种情况...... say_hi()完成,在这种情况下没有问题...... 但我想要的是,如果用户输入命令(例如:结束) 然后这个say_hi()在两者之间终止..

但我当前的实现非常顺序..我的意思是我不能在终端上输入任何内容,直到执行完成为止。 Somethng告诉我say_hi()应该在另一个线程上运行?

我无法直接思考这一点。 有什么建议? 感谢

1 个答案:

答案 0 :(得分:7)

您正在寻找线程模块。

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

作为旁注,您必须确保在线程内部使用线程安全函数。在打招呼的例子中,您可能希望使用日志记录模块而不是print()

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

您可以阅读更多in the Python Docs