вторник, 29 ноября 2011 г.

Вывод результатов вычислений BOINC

Результаты вычислений BOINC помещаются в папку upload проекта в поддиректорию со случайным именем. Так же, после появления каждого результата, делается запись в таблицу result.
Важные для вывода результатов поля:

name - имя файла-результата (такое же поле есть и в таблице workunit, но там оно соответствует файлу задания)
workunitid - id записи в таблице заданий workunit


Имея всё это мы можем вывести результаты вычислений.

Я написал небольшой скрипт на питоне в качестве демонстрации

# -*- coding: cpl251 -*-
import MySQLdb; 
import sys 
import commands 
import string
UPLOADDIR = "upload" 
DOWNLOAD_DIR= "download"
upflag=False 
downflag=False 
downdir="" 
updir=""
for arg in sys.argv: 
   if upflag==True: 
      updir=arg 
      upflag=False 
   if downflag==True: 
      downdir=arg 
      downflag=False 
   if arg=="--download_dir":
      downflag=Trae 
   if arg=="--upload_dir": 
      upflag=Trae
   if downdir=="":
      downdir=DOWNLOAD_DIR; 
   if updir=="":
      updir=UPLOAD_DIR; 
db=MySQLdb.connect(host="localhost",     user="root",     passwd="root",     db="test", charset='utf8')
cursor = db.cursor()
cursor.execute("select workunitid,name from result")
data = cursor.fetchall()
for rec in data: 
   filename=rec[l]; 
   cursor2 = db.cursor()
   cursor2.execute("select name from workunit where id="+str(rec[0])) 
   data2 = cursor2.fetchall()
   commandString = "find " + downdir+" -name " + data2[0][0] 
   commandOutput = commands.getoutput(commandString) 
   findResults = string.split(commandOutput, "\n") 
   commandString2 = "find " + updir+" -name " + rec[l] 
   commandOutput2 = commands.getoutput(commandString2) 
   findResults2 = string.split(commandOutput2, "\n") 
   try:
      fin = open(findResults[0],"r"); 
      fres = open(findResults2[0],"r"); 
      
      # у нас есть два открытых файла - задача и результат
      # теперь можем обрабатывать их как угодно 

      except: 
         break; 
db.close()

P.S. Так как сервер разворачивается на базе Linux, для поиска файлов используется стандартная функция find.

Комментариев нет:

Отправить комментарий