Removed unmaintained parallel module
The module is unmaintained and in any case, does not limit the amount of parallel jobs.
This commit is contained in:
parent
62c51ab150
commit
f2bde1b6bd
@ -1,117 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Relational
|
||||
# Copyright (C) 2009 Salvo "LtWorf" Tomaselli
|
||||
#
|
||||
# Relational is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# author Salvo "LtWorf" Tomaselli <tiposchi@tiscali.it>
|
||||
#
|
||||
# This module offers capability of executing relational queries in parallel.
|
||||
|
||||
import optimizer
|
||||
import multiprocessing
|
||||
import parser
|
||||
|
||||
|
||||
def execute(tree, rels):
|
||||
'''This funcion executes a query in parallel.
|
||||
Tree is the tree describing the query (usually obtained with
|
||||
parser.tree(querystring)
|
||||
rels is a dictionary containing the relations associated with the names'''
|
||||
|
||||
q = multiprocessing.Queue()
|
||||
p = multiprocessing.Process(target=__p_exec__, args=(tree, rels, q,))
|
||||
p.start()
|
||||
result = q.get()
|
||||
p.join()
|
||||
return result
|
||||
|
||||
|
||||
def __p_exec__(tree, rels, q):
|
||||
'''q is the queue used for communication'''
|
||||
if tree.kind == parser.RELATION:
|
||||
q.put(rels[tree.name])
|
||||
elif tree.kind == parser.UNARY:
|
||||
|
||||
# Obtain the relation
|
||||
temp_q = multiprocessing.Queue()
|
||||
__p_exec__(tree.child, rels, temp_q)
|
||||
rel = temp_q.get()
|
||||
|
||||
# Execute the query
|
||||
result = __p_exec_unary__(tree, rel)
|
||||
q.put(result)
|
||||
elif tree.kind == parser.BINARY:
|
||||
left_q = multiprocessing.Queue()
|
||||
left_p = multiprocessing.Process(
|
||||
target=__p_exec__, args=(tree.left, rels, left_q,))
|
||||
right_q = multiprocessing.Queue()
|
||||
right_p = multiprocessing.Process(
|
||||
target=__p_exec__, args=(tree.right, rels, right_q,))
|
||||
|
||||
# Spawn the children
|
||||
left_p.start()
|
||||
right_p.start()
|
||||
|
||||
# Get the left and right relations
|
||||
left = left_q.get()
|
||||
right = right_q.get()
|
||||
|
||||
# Wait for the children to terminate
|
||||
left_p.join()
|
||||
right_p.join()
|
||||
|
||||
result = __p_exec_binary__(tree, left, right)
|
||||
q.put(result)
|
||||
return
|
||||
|
||||
|
||||
def __p_exec_binary__(tree, left, right):
|
||||
if tree.name == '*':
|
||||
return left.product(right)
|
||||
elif tree.name == '-':
|
||||
return left.difference(right)
|
||||
elif tree.name == 'ᑌ':
|
||||
return left.union(right)
|
||||
elif tree.name == 'ᑎ':
|
||||
return left.intersection(right)
|
||||
elif tree.name == '÷':
|
||||
return left.division(right)
|
||||
elif tree.name == 'ᐅᐊ':
|
||||
return left.join(right)
|
||||
elif tree.name == 'ᐅLEFTᐊ':
|
||||
return left.outer_left(right)
|
||||
elif tree.name == 'ᐅRIGHTᐊ':
|
||||
return left.outer_right(right)
|
||||
else: # tree.name=='ᐅFULLᐊ':
|
||||
return left.outer(right)
|
||||
|
||||
|
||||
def __p_exec_unary__(tree, rel):
|
||||
if tree.name == 'π': # Projection
|
||||
tree.prop = tree.prop.replace(' ', '').split(',')
|
||||
result = rel.projection(tree.prop)
|
||||
elif tree.name == "ρ": # Rename
|
||||
# tree.prop='{\"%s\"}' %
|
||||
# tree.prop.replace(',','\",\"').replace('➡','\":\"').replace(' ','')
|
||||
d = {}
|
||||
tree.prop = tree.prop.replace(' ', '')
|
||||
for i in tree.prop.split(','):
|
||||
rename_ = i.split('➡')
|
||||
d[rename_[0]] = rename_[1]
|
||||
|
||||
result = rel.rename(d)
|
||||
else: # Selection
|
||||
result = rel.selection(tree.prop)
|
||||
return result
|
Loading…
Reference in New Issue
Block a user