;ò N ¤Ec@s_dZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk Z dZ dZ edjo©hZeiZeiZeiƒZee_ee_eieeiƒƒdƒeiƒxIno=eiiƒZeieƒ oçeidƒeiƒeeiiƒƒZ eii!e ƒZ"e i#e"ƒ\Z$Z%Z&gi'Z(e%D]Z)e(e*e)dd ƒƒqd[(Z+xGe&D]?Z,ye-e,ƒe.ƒe,e+D]6Z2ye3e2ƒWqKd GHei/ei0ƒŒqKXqKWe.ƒe$Z4ye4e1ŒZ5Wn%d GHei/ei0ƒŒe6Z5nXe i7e5ei8ƒfƒZ"eiee9e"ƒƒdƒeie"ƒeiƒqàWndfd„ƒYZ:dfd„ƒYZ;dfd„ƒYZ<dS(sfParallel Python SMP http://www.parallelpython.com - documentation, usage examples and support forum Ns>Copyright (c) 2005-2007 Vitalii Vanovschi. All rights reserveds1.1 betas__main__s isY ssexecs-An error has occured during the module importsN s/An error has occured during the function imports2An error has occured during the function executions_TaskcBstZd„Zd„ZRS(NcCs)tiƒ|_|iiƒ||_dS(N(sthreads allocate_locksselfslocksacquirestid(sselfsserverstid((s/home/vitaly/dev/ppsmp/ppsmp.pys__init__Fs cCs%|iiƒ|iiƒ|iSdS(N(sselfslocksacquiresreleasesresult(sself((s/home/vitaly/dev/ppsmp/ppsmp.pys__call__Ks  (s__name__s __module__s__init__s__call__(((s/home/vitaly/dev/ppsmp/ppsmp.pys_TaskEs s_WorkercBstZd„ZRS(NcCs~dtidtd}tiidƒod|d}nti|ƒ\|_|_ t |ii ƒƒ|_ t |_dS(Ns"s" "swin(ssyss executables__file__scommandsplatforms startswithspopen2sselfsrswsintsreadlinespidsTruesis_free(sselfscommand((s/home/vitaly/dev/ppsmp/ppsmp.pys__init__Rs (s__name__s __module__s__init__(((s/home/vitaly/dev/ppsmp/ppsmp.pys_WorkerQssServercBs’tZdZdeieid„Zd„Zd„Z d„Z ffd„Z d„Z dd„Z d „Zd „Zd „Zd „Zd „ZRS(s/Parallel Python SMP execution server class s autodetectcCsš|i||ƒtidt|ƒƒd|_g|_d|_ t i ƒ|_ t i ƒ|_ g|_h|_|i|ƒtid|ifƒdS(sè Creates server instance ncpus - the number of worker processes, if parammeter is omitted it will be set to the number of processors in the system loglevel - logging level logstream - log destiunation With ncpus = 1 all tasks are executed consequently For the best performance either use default "autodetect" value or set ncpus to the total number of processors in the system screating server instance is$ppsmp server started with %d workersN(sselfs_Server__initLogsloglevels logstreamsloggingsdebugsstrs _Server__tids_Server__queues_Server__activeTaskssthreads allocate_locks_Server__addToActiveTasks_locks_Server__scheduler_locks_Server__workerss_Server__sourcesHMs set_ncpussncpussinfos_Server__ncpus(sselfsncpussloglevels logstream((s/home/vitaly/dev/ppsmp/ppsmp.pys__init__`s       cCs¡tidt|ƒƒxƒ|iD]x}tid|ifƒtii dƒo"t i dt|iƒdƒq!t i |idƒt i |idƒq!WdS(Nsdeleting server instance s#exiting worker process with pid=%d swinsTASKKILL /PID s /Fi i(sloggingsdebugsstrsselfs_Server__workerssworkerspidssyssplatforms startswithsosspopenskillswaitpid(sselfsworker((s/home/vitaly/dev/ppsmp/ppsmp.pys__del__xs "cCsttdƒo8tidƒ}t|tƒo |djo|SqHntiidƒo,ttidƒ}|djo|Sq‡ndSdS(NssysconfsSC_NPROCESSORS_ONLNisNUMBER_OF_PROCESSORSi(shasattrsosssysconfsncpuss isinstancesintsenvironshas_key(sselfsncpus((s/home/vitaly/dev/ppsmp/ppsmp.pys__detect_ncpus„s   cCshti|ƒ}|i|ƒ|itidƒƒtidƒ|_ |i i |ƒ|i i|ƒdS(Ns%%(asctime)s %(levelname)s %(message)ss( sloggings StreamHandlers logstreams logHandlerssetLevelsloglevels setFormatters Formatters getLoggersselfs_Server__loggers addHandler(sselfsloglevels logstreams logHandler((s/home/vitaly/dev/ppsmp/ppsmp.pys __initLog’s  cCsi|iƒ}t||ƒ}|ii|||||fƒ|i i d||i fƒ|iƒ|SdS(sSubmits function to the execution queue func - function to be executed args - tuple with arguments of the 'func' depfuncs - tuple with functions which might be called from 'func' modules - tuple with module names to import sTask %i submited, function='%s'N(sselfs_Server__gentidstids_Tasksjobs_Server__queuesappendsfuncsargssdepfuncssmoduless_Server__loggersdebugs func_names_Server__scheduler(sselfsfuncsargssdepfuncssmodulessjobstid((s/home/vitaly/dev/ppsmp/ppsmp.pyssubmit›s  cCs |iSdS(s&Returns the number of worker processesN(sselfs_Server__ncpus(sself((s/home/vitaly/dev/ppsmp/ppsmp.pys get_ncpus«scCsÉ|djo|iƒ}nt|tƒ otdƒ‚n|djotdƒ‚n|t|iƒjoK|ii gi }t |t|iƒƒD]}|tƒƒq›~ƒn||_dS(s¶Sets the number of worker processes ncpus - the number of worker processes, if parammeter is omitted it will be set to the number of processors in the systems autodetectsncpus must have 'int' typeis ncpus must be a positive integerN(sncpussselfs_Server__detect_ncpuss isinstancesints TypeErrors ValueErrorslens_Server__workerssextendsappends_[1]srangesxs_Workers_Server__ncpus(sselfsncpuss_[1]sx((s/home/vitaly/dev/ppsmp/ppsmp.pys set_ncpus¯s  KcCsÈ|iiƒ|i|ijo|io|iidƒ}x?|iD]}|i ot |_ PqFqFW|i i dƒd‚|idƒyti|i||fƒWq·q·Xn|iiƒdS(NisThere are no free workers leftsError: No free workersi(sselfs_Server__scheduler_locksacquires_Server__activeTaskss_Server__ncpuss_Server__queuespopstasks_Server__workerssworkersis_freesFalses_Server__loggerserrors_Server__add_to_active_taskssthreadsstart_new_threads _Server__runsrelease(sselfstasksworker((s/home/vitaly/dev/ppsmp/ppsmp.pys __scheduler½s       cCsIt|ƒ}|ii|ƒ oti|ƒ|i|