如何在等待 getch 的同时 运行 完成一项辅助任务?
How to run a side task while also waiting for getch?
所以我有这个小程序(使用Linux):
import getch
while True:
print("Hello World!")
key = getch.getch()
if key == 'q':
break
所以它所做的就是等待用户按下一个键,然后他们会在控制台上显示 "Hello World!"。但是,有没有办法让我可以连续向控制台显示 "Hello World!",而让它结束的唯一方法是用户按下 "q" 键?
这个问题类似于this one,但是是在C++中。
我的第一个想法是查找线程,但是,我尝试了我能找到的所有线程,其中 none 个有效。然后我遇到了全局解释器锁(GIL),据说它可以防止 "multiple native threads from executing Python bytecodes at once."
然后我尝试使用多处理,但它仍然不适合我。这是我使用它的程度:
import multiprocessing
import getch
def test1():
print("Hello World!")
def test2():
key = getch.getch()
if key == 'q':
exit()
while True:
p1 = multiprocessing.Process(target=test1, args=())
p2 = multiprocessing.Process(target=test2, args=())
p1.start()
p2.start()
p1.join()
p2.join()
我是不是漏掉了什么?或者还有另一种方法可以让我在等待 getch()
的同时做一些事情吗?或者我是否必须用另一种支持多线程的语言(如 C++)来编写此代码?
谢谢
我无法安装fetch,可能是因为我现在在Windows,但是你可以实现你想要的(但是,有没有办法让我可以连续显示"Hello World!" 到控制台,让它结束的唯一方法是用户按下 "q" 键?)如下:
import time
from threading import Thread
def another_thread():
while True:
time.sleep(2)
print("Working...\n")
def main_thread():
while True:
x = input("Press a key: \n")
if x == "q":
break
if __name__ == '__main__':
# create another Thread object
# daemon means that it will stop if the Main Thread stops
th = Thread(target=another_thread, daemon=True)
th.start() # start the side Thread
main_thread() # start main logic
所以我有这个小程序(使用Linux):
import getch
while True:
print("Hello World!")
key = getch.getch()
if key == 'q':
break
所以它所做的就是等待用户按下一个键,然后他们会在控制台上显示 "Hello World!"。但是,有没有办法让我可以连续向控制台显示 "Hello World!",而让它结束的唯一方法是用户按下 "q" 键?
这个问题类似于this one,但是是在C++中。
我的第一个想法是查找线程,但是,我尝试了我能找到的所有线程,其中 none 个有效。然后我遇到了全局解释器锁(GIL),据说它可以防止 "multiple native threads from executing Python bytecodes at once."
然后我尝试使用多处理,但它仍然不适合我。这是我使用它的程度:
import multiprocessing
import getch
def test1():
print("Hello World!")
def test2():
key = getch.getch()
if key == 'q':
exit()
while True:
p1 = multiprocessing.Process(target=test1, args=())
p2 = multiprocessing.Process(target=test2, args=())
p1.start()
p2.start()
p1.join()
p2.join()
我是不是漏掉了什么?或者还有另一种方法可以让我在等待 getch()
的同时做一些事情吗?或者我是否必须用另一种支持多线程的语言(如 C++)来编写此代码?
谢谢
我无法安装fetch,可能是因为我现在在Windows,但是你可以实现你想要的(但是,有没有办法让我可以连续显示"Hello World!" 到控制台,让它结束的唯一方法是用户按下 "q" 键?)如下:
import time
from threading import Thread
def another_thread():
while True:
time.sleep(2)
print("Working...\n")
def main_thread():
while True:
x = input("Press a key: \n")
if x == "q":
break
if __name__ == '__main__':
# create another Thread object
# daemon means that it will stop if the Main Thread stops
th = Thread(target=another_thread, daemon=True)
th.start() # start the side Thread
main_thread() # start main logic