Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异步Python_Python_Python 2.7 - Fatal编程技术网

异步Python

异步Python,python,python-2.7,Python,Python 2.7,无论何时,假设我有一个信号来自于从代码外部不断更新的变量,我希望我的代码成为第三方应用程序。假设它在0到立即停止100之间变化。例如: import time while True: try: print("message one") time.sleep(10) print("message two") time.sleep(10) except KeyboardInterrupt: print("

无论何时,假设我有一个信号来自于从代码外部不断更新的变量,我希望我的代码成为第三方应用程序。假设它在0到立即停止100之间变化。例如:

import time
while True:
    try:
        print("message one")
        time.sleep(10)
        print("message two")
        time.sleep(10)
    except KeyboardInterrupt:
        print("message three")
当我按下Ctrl+C键,在程序的第3秒钟有一个主代码,我也会继续循环。所以当变量大于50时,我希望这个循环立即打印“message three”stops。我该怎么做?在这个消息中,它只在20秒后打印“消息三”,但我想中断例程

假设我有一个从第三方应用程序持续更新的变量。假设它在0到100之间变化。我有一个主代码,它在循环中连续工作。所以我希望当变量大于50时,这个循环立即停止。我怎么做

编辑:

实际上我想做的是:

import time

while True:
    dothisfunction()
    time.sleep(10)
    doanotherfunction()
    time.sleep(10)
    alsodoit()
    time.sleep(10)
    andalsodoit()
    time.sleep(10)

假设这是我的主要剧本。我想随时使用键盘中断来中断此脚本,而不是循环结束。

当按下CTRL-C时,它应该立即打印
消息三
,但如果要停止,请添加一个
中断
,以在
循环时离开

except KeyboardInterrupt:
    print("message three")
    break
如果您将try添加到
之外的while
,您甚至不需要中断。CTRL-C将立即退出循环

下面是一个以秒为单位的时间戳示例:

import time
try:
    while True:
        print(time.time(),"message one")
        time.sleep(5)
        print(time.time(),"message two")
        time.sleep(5)
        print(time.time(),"message three")
        time.sleep(5)
        print(time.time(),"message four")
        time.sleep(5)
except KeyboardInterrupt:
    print(time.time(),"CTRL-C!")
输出:

1484687761.801528 message one
1484687766.80314 message two           # 5 seconds later.
1484687767.26655 CTRL-C!               # .4 seconds later...didn't finish loop

它只缺少exit()或raise或break,blockyes除外,但当某种外部中断出现时,如何立即退出循环?尝试一个示例以外的方法。我认为关于外部中断还有另一种方式。@MustafaGökçe你在想什么样的“外部中断”?您特别询问了您介绍的代码,并得到了回答。请在你的帖子中准确地解释你在说什么,因为根据你的意思,解决方案可能会有所不同。例如,
KeyboardInterrupt
与服务器接收的消息非常不同。我对其进行了编辑。谢谢。@MustafaGökçe如果按CTRL-C,控制权会立即转移到except。它不会首先完成循环。如果在except子句中有一个break语句,while也将停止。是的,但是当某种外部中断出现时,我如何立即退出循环?尝试一个示例以外的方法。我认为有另一种方法可以解决外部中断问题。@MustafaGökçe只需将exit()放在break@MustafaGökçe用一个例子编辑了我的答案。根据您的评论,您认为循环不会立即退出,因此我在一个示例中添加了时间戳。