我有两个程序 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()应该在另一个线程上运行?
我无法直接思考这一点。 有什么建议? 感谢
答案 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。