J
Jay Tee
Hi,
I have some code that does, essentially, the following:
- gather information on tens of thousands of items (in this case, jobs
running on a
compute cluster)
- store the information as a list (one per job) of Job items
(essentially wrapped
dictionaries mapping attribute names to values)
and then does some computations on the data. One of the things the
code needs to do, very often, is troll through the list and find jobs
of a certain class:
for j in jobs:
if (j.get('user') == 'jeff' and j.get('state')=='running') :
do_something()
This operation is ultimately the limiting factor in the performance.
What I would like to try, if it is possible, is instead do something
like this:
if j.subset_attr({'user' : 'jeff', 'state' : 'running'}) :
do_something()
where subset_attr would see if the dict passed in was a subset of the
underlying attribute dict of j:
j1's dict : { 'user' : 'jeff', 'start' : 43, 'queue' : 'qlong',
'state' : 'running' }
j2's dict : { 'user' : 'jeff', 'start' : 57, 'queue' : 'qlong',
'state' : 'queued' }
so in the second snippet, if j was j1 then subset_attr would return
true, for j2 the answer would be false (because of the 'state' value
not being the same).
Any suggestions? Constraint : the answer has to work for both python
2.2 and 2.3 (and preferably all pythons after that).
JT
I have some code that does, essentially, the following:
- gather information on tens of thousands of items (in this case, jobs
running on a
compute cluster)
- store the information as a list (one per job) of Job items
(essentially wrapped
dictionaries mapping attribute names to values)
and then does some computations on the data. One of the things the
code needs to do, very often, is troll through the list and find jobs
of a certain class:
for j in jobs:
if (j.get('user') == 'jeff' and j.get('state')=='running') :
do_something()
This operation is ultimately the limiting factor in the performance.
What I would like to try, if it is possible, is instead do something
like this:
if j.subset_attr({'user' : 'jeff', 'state' : 'running'}) :
do_something()
where subset_attr would see if the dict passed in was a subset of the
underlying attribute dict of j:
j1's dict : { 'user' : 'jeff', 'start' : 43, 'queue' : 'qlong',
'state' : 'running' }
j2's dict : { 'user' : 'jeff', 'start' : 57, 'queue' : 'qlong',
'state' : 'queued' }
so in the second snippet, if j was j1 then subset_attr would return
true, for j2 the answer would be false (because of the 'state' value
not being the same).
Any suggestions? Constraint : the answer has to work for both python
2.2 and 2.3 (and preferably all pythons after that).
JT