我正在进行模拟,我需要运行日/夜循环。以下是负责循环的功能:
def epoch():
print("it is now day")
time.sleep(varb.day_night_length)
print("it is now night")
time.sleep(varb.day_night_length)
(varb
是我制作的全局模块的名称,是一个决定白天或晚上长度的值)
事情是我不希望这个函数成为程序停止时的负责人(使for循环无效)。我不希望它是无限的,所以while循环很麻烦。我希望能够在不停止用户输入的情况下顺利运行。是否有捷径可寻?
编辑:如果我无法返回它的状态,我意识到这个循环是无用的。如何在不停止循环的情况下做到这一点? 编辑:找到我需要的东西。对于未来读这篇文章的人,你必须使用yield。它的使用方法与返回单词yield的方式完全相同。谢谢大家!
答案 0 :(得分:1)
这是使用Unix信号的快速而肮脏的概念证明。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import signal
from time import sleep
NIGHT = 0
def toggle_night (foo, bar):
global NIGHT
NIGHT = 1 - NIGHT
signal.alarm(2)
signal.signal(signal.SIGALRM, toggle_night)
signal.alarm(2)
events = ['The cows come home',
'Time passes ...',
'Birds chirp.',
'Partially cloudy',
'Cows? Where are they?',
'... More time passes ...',
'Here we are.']
for t, what in enumerate(events):
print '{0} night: {1}: {2}'.format(t, NIGHT, what)
sleep(1)
演示:
tripleee@away:~$ python /tmp/night.py
0 night: 0: The cows come home
1 night: 0: Time passes ...
2 night: 1: Birds chirp.
3 night: 1: Partially cloudy
4 night: 0: Cows? Where are they?
5 night: 0: ... More time passes ...
6 night: 1: Here we are.
我尝试了相应的setitimer
内容,但无法快速完成...无论如何,所有这些都只是U * x。
答案 1 :(得分:0)
我建议threading
。它打开了一个与其余代码分开的新线程,这意味着它不会停止循环。
尝试一下以下内容:
import time, threading
answer = ""
def user_input():
answer = raw_input("Hello, how are you doing? ")
global answer
Thread1 = threading.Thread(target = user_input)
for the_time in range(100): #Example loop
time.sleep(2)
print answer