2016-11-11 3 views
2

私は以下のpythonスクリプトを持っています。私は、非同期に実行している10秒ごとに、timer関数を繰り返し実行したい。私はpost1post2を見ましたが、値は返されません。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 

メインスレッドがまだ他の仕事をしている間に、毎時間間隔ごとに値を取得する方法はありますか?リンクされたものを使用して、それについて移動する

+0

あなたの問題は投稿1と2と比べてどのように違いますか? – amirouche

+0

呼び出しがブロックされました返される値が必要です –

答えて

0

一つの方法に:インナーしばらくは「ものをやって」メインスレッドをエミュレートし、10秒ごとに

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 

あなたはasync_resultから新しい結果を取得し、スタートをジャンプする必要があります新しい非ブロック実行。外側のループは、メインスレッドを実行し続けるだけです。

関連する問題