在python中定期和异步检索值

时间:2016-11-11 12:54:35

标签: python multithreading threadpool

我有以下python脚本。我想在每10秒钟后重复执行timer函数,这是我异步运行的。我查看了post1post2,但他们没有返回任何值。

import threading
def timer(bar, baz):
  print 'hello {0}'.format(bar)
  return 'foo' + baz

from multiprocessing.pool import ThreadPool
pool = ThreadPool(processes=1)

async_result = pool.apply_async(timer, ('world', 'foo'))

return_val = async_result.get()
print return_val

当主线程还在做其他工作时,有没有办法在每t个时间间隔后获取值?

1 个答案:

答案 0 :(得分:0)

使用您链接的内容进行处理的一种方法:

from threading import Timer
from multiprocessing.pool import ThreadPool
from time import sleep

def getLast():
    global got
    Timer(10,getLast).start()
    got = async_result.get()

def action(bar, baz):
    print 'hello {0}'.format(bar)
    return 'foo ' + baz

pool = ThreadPool(processes=1)
async_result = pool.apply_async(action, ('world', 'foo'))
Timer(10,getLast).start()

string = 'a'
while True:
    got = None
    while got is None:
        sleep(2)
        print 'Doing stuff'
    print 'Got:',got
    async_result = pool.apply_async(action, ('world', 'foo '+string))
    string +='a'
    got = None

内部同时模拟主线程'做东西',每10秒你应该从async_result获得一个新结果,然后跳转开始一个新的非阻塞运行。外部循环只是让主线程保持运行。