2011年1月7日金曜日

Python CSVデータ 一括登録 TaskQueue編

WEBサイト構築中につき大量のデータを登録することに。

大体数万件になりますか。

今回GAE+Pythonで開発中。

CSVファイルのアップロード機能を裏ページに実装し、登録を試みるが、

GAEの1リクエスト30秒という制約により一回に約200件ずつしか登録できない。

数万件のCSVファイルを数百件毎に分割するのも面倒、というか膨大な時間がもったいない。

そこで、登録処理を自動かつ大量に一括で走らせるために試行錯誤中。

今回はTask Queueをデータ登録用に作成。

一件ずつTaskを登録し、定期的に処理を実行することで自動化を実現することに。

肝心なCSVデータは一時的なものなので、GAEとは別の公開用のサーバーにアップ。

pythonライブラリ urllibを使用しCSVデータにアクセスした。

tasks.py
----------------------------------------------------------------------

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from google.appengine.ext import webapp
from google.appengine.api.labs import taskqueue
import urllib


class add_tasks(webapp.RequestHandler):
  def get(self):

    mytask = taskqueue.Queue('task-queue')
  
    #URLパス
    urlRequest="http://example.com/csvdata/data.csv"
    #CSVファイルにアクセス
    result = urllib.urlopen(urlRequest)
  
    #取得したデータを1行ずつTaskに追加
    for readline in result.readlines():
        row = readline.split(',')
        if len(row) > 0:
            task = taskqueue.Task(url='/data_ins' , params = {
                                                              'prm0':unicode(row[0], 'cp932'),
                                                              'prm1':unicode(row[1], 'cp932'),
                                                              'prm2':unicode(row[2], 'cp932'),
                                                              'prm3':unicode(row[3], 'cp932'),
                                                              })
            mytask.add(task)
----------------------------------------------------------------------

これだけのことなのにまたかなりの時間を要しちゃいました。

ただこの後、実際にTaskの実行で走らせる登録処理が動作せず。

簡単に直せそうだったけどまたはまっちゃいそうだし、力つきてTaskの登録までで終了。

pythonが全然慣れません!

わからないことが多すぎて。

日々精進。

0 件のコメント:

コメントを投稿