Python从预定事件返回值

时间:2013-10-30 10:32:01

标签: python multithreading scheduled-tasks

我想从调度事件调用的函数返回值。以下是我想要做的一个简单示例。

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


也许有必要提供一些背景知识。

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

如果用户想要在预定事件完成后查看信息(这个答案进来的话),那么它将等到事件结束并将返回的值发送给客户端。

如果没有,活动将被安排,客户将收到“完成,告别。”#34;连接将关闭。

我打电话给编程之神,请你帮助我。

1 个答案:

答案 0 :(得分:2)

问题实际上很简单。你是从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'm called!') 
if __name__ = "__main__":
    schedthis()
    with open("output.txt", 'r') as f:
        print(f.read())

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

希望这有帮助!