当在另一个线程中使用“ getstr”时,为什么该线程暂停? Python诅咒

时间:2020-05-01 11:00:59

标签: python python-curses

我创建了一个线程,该线程应该显示经过的秒数。不幸的是,当我从getstr模块使用curses时,整个脚本都会停止,包括线程。我必须使用线程锁来阻止由于顺序重叠而打印出随机字符。

关于如何解决此问题或替代方案的任何建议都很棒!

在下面的示例中,windowwindow2已经设置好...

lock = threaing.Lock()


def main_function():
  #starts thread
  t1 = threading.Thread(target=time_calc,args=(window2,))
  t1.start()
  #Gets user input
  while True:
    data = window1.addstr(y,x,"Type something in!")
    data = window1.getstr(y,x,5)

    lock.acquire()
    window1.erase()
    txt = "You said: "+data

    window1.addstr(y,x,txt)
    lock.release()


def time_calc(window2):
  current_count = 0

  while True:

    time += 1

    text = "Time Count: "+str(time)

    lock.acquire()
    window2.erase()

    window2.addstr(y,x,text)
    lock.release()

    time.sleep(1)

1 个答案:

答案 0 :(得分:0)

我的代码有问题

我发现了我的代码存在的问题。由于某种原因,您无法运行线程,而我最初将我的main函数称为线程。我想我应该在我的问题中说过这一点。抱歉

可能有一种在线程中运行线程的方法,但这对我没有作用。

我的更新代码

lock = threading.Lock()

def call_threads():
  t1 = threading.Thread(target=main_function,args=(window1,))
  t1.start()

  t2 = threading.Thread(target=time_calc,args=(window2,))
  t1.start()

def main_function(window1):
  #Gets user input
  while True:
    data = window1.addstr(y,x,"Type something in!")
    data = window1.getstr(y,x,5)

    lock.acquire()
    window1.erase()
    txt = "You said: "+data

    window1.addstr(y,x,txt)
    lock.release()


def time_calc(window2):
  current_count = 0

  while True:

    time += 1

    text = "Time Count: "+str(time)

    lock.acquire()
    window2.erase()

    window2.addstr(y,x,text)
    lock.release()

    time.sleep(1)

如果还有其他可能导致此错误的原因,请发表评论!