2

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

程序 1 也有一个 quit_program() 模块 在我们简单的宇宙中.. 假设我只有一个命令和一个程序 所以让我们说...

程序1.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() 完成,在这种情况下没有问题......但我想要的是,如果用户输入命令(比如:end),那么这个 say_hi() 将在两者之间终止......

但是我当前的实现是非常连续的..我的意思是在执行完成之前我不会在终端上输入任何内容.. Somethng 告诉我 say_hi() 应该在另一个线程上运行?

我无法直截了当地思考这个问题。有什么建议么?谢谢

4

1 回答 1

12

线程模块是您正在寻找的。

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')

您可以在 Python 文档中阅读更多内容。

于 2013-02-08T23:18:35.690 回答