【问题标题】:Python return value from scheduled eventPython 从预定事件返回值
【发布时间】:2013-11-09 21:09:38
【问题描述】:

我想获取预定事件调用的函数返回的值。下面是我想做的一个简单示例。

import time
import sched

schedule = sched.scheduler(time.time, time.sleep)

def ret_this():
    return "This."

def schedthis():
    schedule.enter(2,1,ret_this, ())
    schedule.run()
    ## <- print returned value here

if __name__ == "__main__":
    schedthis()

我尝试了很多方法,例如:

     schedule.enter(2,1,print ret_this, ())

甚至:

    schedule.enter(2,1,ret = ret_this, ())
    schedule.run()
    print ret


也许需要一些背景知识。

我想创建一个服务器来侦听传入的连接(已完成。)。建立连接后,将产生一个新线程,并将套接字解析到该线程。在该线程上,将读取发送到服务器的值,并且服务器将判断客户端尝试调度的内容。一旦服务器知道客户端想要什么,它就会安排它。

如果用户想在计划的事件完成后查看信息(此答案的来源),那么它将等到事件结束并将返回的值发送给客户端。

否则,将安排活动,客户将收到“完成,再见”。并且连接将关闭。

我称编程之神,请你帮帮我。

【问题讨论】:

    标签: python multithreading scheduled-tasks


    【解决方案1】:

    问题其实很简单。你从 ret_this 函数返回了一些东西,但你没有把它放在任何地方,也没有打印它!

    编辑
    请看这个

    原来我之前发布的代码只执行该函数,而不是当它由调度程序运行时。 由于scheduler.run 只运行一个函数而不真正关心它返回的值,因此您必须将它存储在某个地方才能真正知道它何时被调用。

    例如,在一个全局变量中:

    def ret_this():
        global result
        result = "I'm called!"
    

    或者直接从ret_this打印出来:

    def ret_this():
        print "This."
    

    编辑 2
    另一种存储方式是将其写入文件。您可以稍后再阅读:

    def ret_this():
        with open('output.txt', 'w') as f:
            f.write('I am called!')
    
    if __name__ = "__main__":
        schedthis()
        with open("output.txt", 'r') as f:
            print(f.read())
    

    如果执行成功,您的文件将包含I am called!。否则,它将是空的。

    希望这会有所帮助!

    【讨论】:

    • @alKid 谢谢你的回复。谁能验证这个答案?当我尝试它时,会打印一个 None 值。如果我更改 ret_this 返回的值,我仍然会收到 None 值。我在 python 2.7.4 和 3.3.2 上对此进行了测试,也许这适用于您的设置,因为这将是我正在寻找的确切答案。
    • 我们可以移步聊天讨论吗?
    • 我正在用 python 2.7 测试它,它工作正常。让我马上给你看我的完整代码。
    • 好像我的代码有错误,返回函数的是enter,而不是run。我会更新我的代码。
    • 我已经更新了我的答案,我的最后一个不是真的正确。很抱歉给您带来不便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多