From a7ce04a03dadcfcb39cc963f3230a91af87fa385 Mon Sep 17 00:00:00 2001 From: Kamil Bugajski Date: Thu, 16 Aug 2012 19:20:04 +0200 Subject: [PATCH] parallelisierung mit angepasster cfg --- bin/generationlib | 169 ++++++++++++++++++++++++++++++++++++++++++ bin/svgconvert.sh | 8 ++ cfg/punkteraetsel.cfg | 6 +- 3 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 bin/generationlib create mode 100644 bin/svgconvert.sh diff --git a/bin/generationlib b/bin/generationlib new file mode 100644 index 0000000..c94367c --- /dev/null +++ b/bin/generationlib @@ -0,0 +1,169 @@ +#!/bin/bash +NUM=0 +QUEUE="" +MAX_NPROC=2 # default +REPLACE_CMD=0 # no replacement by default + +USAGE="A simple wrapper for generating jpg pictures out of svg-files in parallel. +Usage: `basename $0` [-h] [-i] [-j nb_jobs] command arg_list + -h Shows this help + -c give the path to the cfg file + -i give the path of the svg files without the last / + -j Set number of simultanious jobs. Default is 2 + -o directory where the files should be moved to after creation. + Default ist PICCREATE_OUT + Examples: + `basename $0` -i file -c config + `basename $0` -j 3 -i file -c config" + +function queue { + QUEUE="$QUEUE $1" + NUM=$(($NUM+1)) +} +function regeneratequeue { + OLDREQUEUE=$QUEUE + QUEUE="" + NUM=0 + for PID in $OLDREQUEUE + do + if [ -d /proc/$PID ] ; then + QUEUE="$QUEUE $PID" + NUM=$(($NUM+1)) + fi + done +} +function checkqueue { + OLDCHQUEUE=$QUEUE + for PID in $OLDCHQUEUE + do + if [ ! -d /proc/$PID ] ; then + regeneratequeue # at least one PID has finished + echo $PID + break + fi + done +} +function cfg_parser { + INI_FILE=$1 + SECTION=$2 + echo $1 + echo $2 + eval `sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}" < $INI_FILE`>> trr.txt + echo 'helololo' +} +function get_filepath { + # probiere alle möglichen Kombinationen wo das file stehen könnte je + # nachdem ob es mit oder ohne Endung, mit oder ohne den Komplettpfad + # gegeben wurde + FILENAME=$1 + ENDING=$2 + DEFAULT_DIR=$3 + if [ -s $FILENAME ] ; then + echo $FILENAME + elif [ -s $FILENAME.$ENDING ] ; then + echo "$FILENAME.$ENDING" + elif [ -s $DEFAULT_DIR/$FILENAME ] ; then + echo "$DEFAULT_DIR/$FILENAME" + elif [ -s $DEFAULT_DIR/$FILENAME.$ENDING ] ; then + echo "$DEFAULT_DIR/$FILENAME.$ENDING" + fi + return +} + +# Funktion die auf globalen Parametern beruht. +# überprüft ob alle notwendigen Angaben vorhanden sind +function check_params { + if [ -z "$INPUT_FILENAME" ]; then + echo "please give input file with -i." + exit 1 + fi + if [ -z "$CFG_FILENAME" ]; then + echo "please give config file with -c." + exit 1 + fi + + INPUT_FILE=`get_filepath $INPUT_FILENAME 'csv' $PICCREATE_WORK` + if [ ! -s $INPUT_FILE ] ; then + echo "-> input filename does not exist" + print "given was: -$INPUT_FILENAME-" + exit 1 + fi + CFG_PATH=`get_filepath $CFG_FILENAME 'cfg' $PICCREATE_CFG` + if [ ! -s $CFG_PATH ]; then + echo "-> config file with this name does not exist." + print "given was: -$CFG_FILENAME-" + exit 1 + fi + cfg_parser $CFG_PATH "$SECTION_NAME" + echo 'using width '$width + echo 'using height '$height + if [ -z "$width" ]; then + echo "please give width=xxx in section [$SECTION_NAME] in config $CFG_FILENAME." + exit 1 + fi + if [ -z "$height" ]; then + echo "please give height=xxx in section [$SECTION_NAME] in config $CFG_FILENAME." + exit 1 + fi +} + + +# parse command line +if [ $# -eq 0 ]; then # must be at least one arg + echo "$USAGE" >&2 + exit 1 +fi + +while getopts "j:i:o:hc:" OPT; do # "j:" waits for an argument "h" doesnt + case $OPT in + h) echo "$USAGE" + exit 0 ;; + j) MAX_NPROC=$OPTARG ;; + c) CFG_FILENAME=$OPTARG ;; + o) OUTDIR=$OPTARG ;; + i) INPUT_FILENAME=$OPTARG ;; + *) echo "$USAGE" >&2; exit 1; # Default. + esac +done + + +# Main program +echo Using $MAX_NPROC parallel threads +check_params + +# Starte die Generierung +echo $INPUT_FILE +for i in `ls $INPUT_FILE| grep .svg ` +do + echo $i + ID=`echo "$i" | sed -e 's/;.*//g'` + PIC_NAME=`echo "$i" | sed -e 's/.svg/.jpg/g'` + echo PID + RESIZE="${width}x${height}" + SWITCHES="-density $density $INPUT_FILE/$ID -resize $RESIZE $INPUT_FILE/$PIC_NAME" + CMDLINE="$CMD $SWITCHES" + echo $CMDLINE + (echo $ID; $CMDLINE) & + + PID=$! + queue $PID + + while [ $NUM -ge $MAX_NPROC ]; do + checkqueue + sleep 0.5 + done +done + +wait # wait for all processes to finish before exit + +if [ ! -z $OUTDIR ]; then + echo -n moving to $OUTDIR + if [ ! -d $OUTDIR ]; then + echo creating directory $OUTDIR + mkdir $OUTDIR + fi + mv $PICCREATE_OUT/*.jpg $OUTDIR + echo done +fi + +# vi:set wrapmargin=0 ai showmatch ts=4 syntax=sh: diff --git a/bin/svgconvert.sh b/bin/svgconvert.sh new file mode 100644 index 0000000..72ac8e7 --- /dev/null +++ b/bin/svgconvert.sh @@ -0,0 +1,8 @@ +#!/bin/bash +export PICCREATE_BIN=~/python/piccreate/bin +. $PICCREATE_BIN/setenv.sh + +CMD=convert +SECTION_NAME=jpgs + +. $PICCREATE_BIN/generationlib diff --git a/cfg/punkteraetsel.cfg b/cfg/punkteraetsel.cfg index 96f608a..20effef 100644 --- a/cfg/punkteraetsel.cfg +++ b/cfg/punkteraetsel.cfg @@ -39,7 +39,7 @@ counter_replace=True align=left [jpgs] -width=1200 -height=1200 +width=1900 +height=700 format=jpg - +density=300