如何获得Tim中使用的函数的输出

2024-09-28 22:35:37 发布

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

我正在运行一个flask应用程序,它将每天同时调用函数getSomething(input)。此函数返回一个字符串。我无法返回print(),因为我需要将字符串传递给另一个函数

使用定时器功能时 t = Timer(secs, getSomething, args=[input]) 我不知道如何获得getSomething函数的返回值

示例:

from datetime import datetime, timedelta
from threading import Timer

# This shall trigger something at a certain time^
x = datetime.today()
y = x + timedelta(seconds=5)
delta_t = y - x
secs = delta_t.seconds + 1

def getSomething(a):
   b = a + " Hello World"
   return b

s = "Test"
t = Timer(secs, getSomething, args=[s])
t.start()

我知道以前也有人问过同样的问题。但我不能适应我的问题,虽然我认为我不能避免返回


Tags: 函数字符串fromimport应用程序flaskinputdatetime
1条回答
网友
1楼 · 发布于 2024-09-28 22:35:37

问题可以通过以下方法解决:

from datetime import datetime, timedelta
from threading import Timer

d = [] # use list, dictionary, some class or queue.Queue to store data


def getSomething(a):
    global d
    d.append(a + " Hello World")


if __name__ == "__main__":
    # This shall trigger something at a certain time^
    x = datetime.today()
    y = x + timedelta(seconds=5)
    delta_t = y - x
    secs = delta_t.seconds + 1
    s = "Test"
    t = Timer(secs, getSomething, args=[s])
    t.start()
    t.join()  # need to wait until thread is finished to get new d value
    print(d[0])

另一个示例是如何从另一个线程获取数据:

from threading import Thread
import time


class Storage:
    def __init__(self):
        self.storage = ""


class MyThread(Thread):
    def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):
        super().__init__(group=group, target=target, name=name, daemon=daemon)
        self.args = args
        self.kwargs = kwargs

    def run(self):
        self.args[0].storage += "Hello!"


if __name__ == "__main__":
    s = Storage()
    branch = MyThread(args=(s,),)
    branch.start()
    time.sleep(1)  # need some time to wait for another thread
    print(s.storage)

相关问题 更多 >