我编写了以下代码,每3秒从列表l
中生成一个随机字母。我的问题的第一部分是如何在1分钟后终止此过程?
import threading
import random
x = []
def printit():
threading.Timer(3.0, printit).start()
l = ['a', 'b', 'c', 'd']
secure_random = random.SystemRandom()
print x.append(secure_random.choice(l))
printit()
此外,我想从那些随机选择的字母中创建另一个列表,并将其命名为x
,上面的代码可以完成此工作,这有一个小问题:当我打开代码时,它开始打印None,并且当我中断时并打印x
,它会给出字母列表,然后继续打印None,这是因为一分钟后我不知道如何终止该过程。
答案 0 :(得分:2)
您当然不应该将线程用于此类操作。
相反,只是
import time
import random
start_time = time.time()
rng = random.SystemRandom()
while time.time() - start_time < 60: # End after a minute
print(rng.choice('abcd'))
time.sleep(3)
答案 1 :(得分:1)
如果您仍然想使用线程,请尝试以下代码:
import threading
import random
import time
x = []
start_time = time.time()
def printit():
current_time = time.time()
print(current_time - start_time)
if current_time - start_time > 60.0:
return
threading.Timer(3.0, printit).start()
l = ['a', 'b', 'c', 'd']
secure_random = random.SystemRandom()
x.append(secure_random.choice(l))
print(x)
printit()
我在Python 3.6中测试了此代码,您可能需要更改print()以使其打印在Python 2中工作
答案 2 :(得分:0)
如果我不正确地理解您的问题,请添加
if x.length is 20:
threading.Timer(3.0, printit).cancel()
在功能结束时可能会有所帮助