运行一个功能而不停止另一个功能 [英] Running one function without stopping another

查看:81
本文介绍了运行一个功能而不停止另一个功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在从控制台请求用户输入时,如何运行计时器?我正在阅读有关多处理的内容,并且尝试使用以下答案: Python:同时执行多个功能.当我试图解决这个问题时,它给了我很多框架错误.

How can I run a timer while asking for user input from the console? I was reading about multiprocessing, and I tried to use this answer: Python: Executing multiple functions simultaneously. When I tried to get it going, it gave me a bunch of framework errors.

现在,它运行start_timer(),但是在运行cut_wire()时将其停止.

Right now it runs start_timer(), but then stops it when it runs cut_wire().

这是我的start_timer函数:

def start_timer():
    global timer
    timer = 10
    while timer > 0:
        time.sleep(1)
        timer -= 1
        sys.stdout.write ("There's only %i seconds left. Good luck. \r" % (timer))
        sys.stdout.flush()
        cut_wire()
    if timer == 0:
        print("Boom!")
        sys.exit()

这是cut_wire函数:

def cut_wire():
    wire_choice = raw_input("\n> ")
    if wire_choice == "cut wire" or wire_choice == "Cut Wire":
        stop_timer()
    else:
        print("Boom!")
        sys.exit()

推荐答案

仅解决您的问题,以下是使用threading的快速修复方法:

Only addressing your concerns, here is a quick fix using threading :

import time
import sys  
import os 

def start_timer():
  global timer
  timer = 10 
  while timer > 0:
    time.sleep(1)
    timer -= 1
    sys.stdout.write ("There's only %i seconds left. Good luck. \r" % (timer))
    sys.stdout.flush()
    #cut_wire() ==> separate call is easier to handle
  if timer == 0:
  print("Boom!")
  os._exit(0)    #sys.exit() only exits thread

def cut_wire():
  wire_choice = raw_input("\n> ")
  if wire_choice == "cut wire" or wire_choice == "Cut Wire":
    stop_timer()
  else:
    print("Boom!")
    os._exit(0)    #same reason

if __name__ == '__main__':
  import threading
  looper = threading.Thread(target=start_timer)
  looper.start()
  cut_wire()

这篇关于运行一个功能而不停止另一个功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆