如何在不影响其余部分的情况下延迟程序的一部分?

How to delay a part of my program without affecting the rest?

我有一个使用计分器的程序。该分数计数器最初为 100,并保持这种状态,直到超过某个阈值。阈值变量称为shipy,我的分数称为score

一旦 shipy 超过 400,我就会每 0.1 秒从我的分数中减去 1,但这样做会导致我的整个程序 运行 变慢。

这是我的代码片段:

shipy = 0
score = 100

# some code here doing something, eg. counting shipy up

if shipy > 400:
    time.sleep(0.1)
    global score
    score-=1

# more code doing something else

有没有办法 运行 独立于代码的其余部分减去分数?

您的程序需要采用 "run to completion" 风格。

因此,给定一个 time_now() 函数,其中 returns 当前时间(以秒为单位),您可以编写如下代码:

prev_time = time_now()
while True:
    run_program()   # Your program runs and returns
    curr_time = time_now()
    if curr_time - prev_time >= 1:
        prev_time += 1
        if shipy > 400:
            score -= 1

这样,您在 run_program() 中的代码就可以执行它必须执行的操作,但 returns 会尽快执行。上面的其余代码从不循环等待时间,而是只在应该运行的时候运行。

处理 score 后,您可以看到再次调用了 run_program()

这只是原理。实际上,您应该将 shipy 的检查合并到 run_program() 函数中。

此外,它在单线程中运行,因此不需要信号量来访问 shipyscore

您需要使用不同的线程来计算分数。刚开始一个新线程来倒计时你的分数。

import threading
import time

def scoreCounter(): 
    while shipy > 400:
        time.sleep(0.1)
        global score
        score-=1

t1 = threading.Thread(target=scoreCounter) 

如果 shipy > 400.

,则只需在代码中的某个位置调用 t1.start()

看看这个多线程程序。

  • 主程序打印"Here you can do other stuff"然后等待你回车
  • 另一个并行函数正在递增变量 i 并打印它

我让你试试这个:

import threading
import time

def main_function():
    global continuer_global, i
    i = 0
    t1 = threading.Thread(target = counter)
    t1.daemon = True # With this parameter, the thread functions stops when you stop the main program
    t1.start()
    print("Here you can do other stuff")
    input("Press Enter to exit program\n")

def counter ():
    # Do an action in parallel
    global i
    while True:
        print("i =", i)
        i += 1
        time.sleep(1)

main_function()