该程序如何在Python中同时执行两个动作?

时间:2018-10-30 14:49:21

标签: python

我希望制作一个程序,将打印从0x的数字,并同时计数时间,并且两者都在控制台中同时执行。我怎样才能做到这一点?

例如,当计算机将数字从0写入x时,我想让程序计数时间:

import time
import sys

time_counter = 0
number = int(input("NUMBER: "))
counter = 0

while (counter < number):
    sys.stdout.write("NUMBERS: " + str(counter) + '\r')
    counter += 1

sys.stdout.write('\n')
while (counter < number):
    sys.stdout.write("TIME COUNTER: " + str(time_counter) + '\r')
    time.sleep(1)
    time_counter += 1

我希望这两个while代码块同时执行。

2 个答案:

答案 0 :(得分:1)

首先,我不清楚您要实现的目标(代码的一般目的)。

但是对于特定的代码问题,您可以使用单个while循环进行尝试,也许像这样:

import time

stop_number = int(input("NUMBER: "))

num_counter = 0
time_counter = 0

while num_counter < stop_number:
    print(num_counter, time_counter)

    time.sleep(1)

    num_counter += 1
    time_counter += 1

我不知道如何轻松地在终端的两行中打印,因此我的代码仅在同一行上打印,每次迭代打印一行。如果您想了解这一点,请看看this answer和其他类似的内容。

答案 1 :(得分:0)

如果要测量打印数字所花费的时间,可以尝试timeit module

import timeit

def f1(stop_number):
    num_counter = 0

    print('Numbers:')
    while num_counter < stop_number:
        print(num_counter, end=' ', flush=True)
        num_counter += 1
    print()

if __name__ == '__main__':
    stop_number = int(input("NUMBER: "))

    t = timeit.timeit(
        stmt='f1({})'.format(stop_number),
        setup='from __main__ import f1',
        number=1000)
    print()
    print('The statement took in average {} seconds to run.'.format(t))

或者,如果需要,您也可以使用time.perf_counter()测量时差:

import time

stop_number = int(input("NUMBER: "))

start_time = time.perf_counter()

num_counter = 0
while num_counter < stop_number:
    print(num_counter)
    num_counter += 1

end_time = time.perf_counter()
print('The code took {} seconds to run.'.format(end_time - start_time))

请注意,打印输出会花费大量时间;只是不打印而进行的迭代将花费更少的时间。