如何在等待 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