2016-11-17 8 views
0

私は次のようにタスクとの契約をしようとしています:geventをタスク "read - search - write"に使用する方法?

  1. がローカルファイルに結果を書き込むクエリのWebサービスへのラインを送るローカルファイル
  2. 内の行を読んで

`

def read(fin): 
    for query in fin: 
     return query 

def search(query): 
    # Send the query to something like Google Search 
    result = google(query) 
    return result 

def write(fout, result): 
    fout.write(result) 

`

私はGeventのチュートリアルを参照していますが、3つの関数をgeventに入れる方法を理解できませんでした。

答えて

1

私はあなたの例がgeventに関連する点については全く知らない。とにかく、それはまだ以下のサンプルコードを通して処理することができます。

import gevent 

def read(fin): 
    for query in fin: 
     return query 

def search(query): 
    # Send the query to something like Google Search 
    result = google(query) 
    return result 

def write(fout, result): 
    fout.write(result) 

# read from different files 
input_files = ["input1.json", "input2.json" ... ] 

# write result into output file 
fout = open("output.json", 'wb') 

# get queries from input files 
queries = [] 
for input_file in input_files: 
    with open(input_file, 'rb') as fin: 
     queries.append(gevent.joinall([gevent.spawn(read, fin)])) 

# store results of queries 
results = [] 
for item in [query for query in queries]: 
    results.append(gevent.joinall([gevent.spawn(search, item[0].value)])) 

# save results into output file 
for item in [result for result in results]: 
    gevent.joinall([gevent.spawn(write, fout, item[0].value)]) 

事はに検索-読み、検索-に書き込みの両方でこれを達成するために、非同期の方法を使用することができません依存を、持っています。したがって、この例では、各関数を処理してリターンを1つずつ保存することができます。

関連する問題