循环vs异步tim

2024-05-16 14:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个模拟,我需要运行一个昼夜循环。以下是负责循环的功能:

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。它的用法与return的用法完全相同,只是使用了yield这个词。在

谢谢大家!在


Tags: 功能编辑用法timeisdefitsleep
2条回答

我推荐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

这里是一个使用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)

演示:

^{pr2}$

我也试过相应的setitimer东西,但没能很快让它发挥作用。。。不管怎么说,所有这些都只是U*x。在

相关问题 更多 >