2016-11-11 3 views
2

У меня есть следующий скрипт python. Я хочу многократно выполнять функцию timer через каждые 10 секунд, которые я запускаю асинхронно. Я посмотрел post1 и post2, но они не возвращают никакого значения.Получение значений периодически и асинхронно в python

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 временных интервалов, в то время как основной поток все еще выполняет другую работу?

+0

Что по-другому в вашей проблеме по сравнению с пост 1 и пост 2? – amirouche

+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, и прыгать начало новый неблокирующий прогон. Внешний контур просто удерживает основной поток.

Смежные вопросы