[lxml-dev] Benchmark script
Hi, as I was at it anyway, I wrote a benchmark script that allows benchmarking simple test cases against different XML trees. Here are the benchmarks I have for now, taken from the new file bench.py in the trunk: def bench_append_from_document(self, tree1, root1, tree2, root2): "1,2" # needs trees 1 and 2 for el in root2: root1.append(root2[0]) def bench_rotate_children(self, tree, root): "1 2" # runs on tree 1 or 2 independently for i in range(100): root[-1] = root[0] def bench_reorder(self, tree, root): "1 2" for i in range(len(root)/2): root[-i] = root[0] The doc strings define the trees (or set of trees) that the benchmark is run against. Calling obviously uses reflection, so you can simply add new methods like the above to have them benchmarked. As an example, here are the results before and after my last patch: ## current trunk: # python bench.py append_from_document (T1,T2 ) 0.0586 0.0584 0.0583 msec/pass, avg: 0.0584 reorder (T1 ) 0.3182 0.3200 0.3183 msec/pass, avg: 0.3188 reorder (T2 ) 0.0951 0.0948 0.0952 msec/pass, avg: 0.0950 rotate_children (T1 ) 14.6780 14.4417 14.3684 msec/pass, avg: 14.4960 rotate_children (T2 ) 0.8209 0.8150 0.8139 msec/pass, avg: 0.8166 ## after applying the patch: # python bench.py append_from_document (T1,T2 ) 0.0582 0.0591 0.0583 msec/pass, avg: 0.0585 reorder (T1 ) 0.2437 0.2629 0.2432 msec/pass, avg: 0.2499 reorder (T2 ) 0.0926 0.0922 0.0923 msec/pass, avg: 0.0924 rotate_children (T1 ) 7.6664 7.6860 7.7656 msec/pass, avg: 7.7060 rotate_children (T2 ) 0.7434 0.7454 0.7599 msec/pass, avg: 0.7496 This is pretty significant in some cases, so I will apply the patch to the trunk. It also tells me that I will have to look at the rotate_children case as it is highly dependent on the type of tree (which it shouldn't be too much, I'd say). So, as usual, feel free to test it and find new benchmark cases for it. Stefan
Martijn Faassen wrote:
Stefan Behnel wrote: [snip]
So, as usual, feel free to test it and find new benchmark cases for it.
I'd be interesting to see how lxml compares to (c)ElementTree in benchmarks like this.
That's an easy one! :) Install them, do a checkout of the trunk and run make python bench.py -i -a (-i == in place, -a == use ElementTree and cElementTree if available) It will take a while - and in the end you will not be very impressed. One of the results of the benchmarks is that ElementTree beats lxml sometimes and that cElementTree beats lxml in most cases. The problems are: a) lxml has to deal with all sorts of backpointers and recursive clean ups in the libxml2 structure, which (c)ElementTree doesn't. b) I had to write the tests in a way that prevents lxml and ElementTree from benefitting from their different semantics (e.g. the implicit removal of lxml elements when copying) So, it's somewhat tricky to come up with comparable benchmarks - and if you find one, it's most likely one where ElementTree wins by default... Still, it's interesting to see the comparison. It tells you where lxml has its weaknesses. I've been putting some effort into removing or lifting some during the last two days, so it's a bit better now. But the relation above still holds. Stefan
Stefan Behnel wrote:
That's an easy one! :)
Install them, do a checkout of the trunk and run
make python bench.py -i -a
(-i == in place, -a == use ElementTree and cElementTree if available)
It will take a while - and in the end you will not be very impressed. One of the results of the benchmarks is that ElementTree beats lxml sometimes and that cElementTree beats lxml in most cases.
can you post a copy of the results ? </F>
Fredrik Lundh wrote:
Stefan Behnel wrote:
That's an easy one! :)
Install them, do a checkout of the trunk and run
make python bench.py -i -a
(-i == in place, -a == use ElementTree and cElementTree if available)
It will take a while - and in the end you will not be very impressed. One of the results of the benchmarks is that ElementTree beats lxml sometimes and that cElementTree beats lxml in most cases.
can you post a copy of the results ?
Here you go. Some of them look a bit bogous - I only have my laptop to run them. So, if the numbers are statistically questionable, you better run the benchmark yourself (or look for bugs in the implementation...). I compiled both lxml and cElementTree for my machine, in case you want to know. The results are also a bit lengthy. They are based on four different trees: a deep one (depth 7, 3 children per node), two broader ones (children per node at each level: root-520-26 and root-26-520) and a small one (root-26-3). Some of the benchmarks need two trees to run, so the script runs them with all possible combinations of the four trees. This allows you to see to what extend the size of the source and destination trees of whatever-the-benchmark-does matters. The benchmark script itself is here: http://codespeak.net/svn/lxml/trunk/bench.py It's pretty easy to extend, just add a new benchmark method to the BenchMark class and run the script. The number of trees that it needs is automatically inferred from its number of arguments. Stefan Preparing test suites and trees ... Running benchmark on etree, ElementTree, cElementTree Setup times for trees in seconds: etree : 0.3495, 0.3159, 0.0705, 0.0024 ElementTree : 0.2363, 0.4836, 0.0681, 0.0010 cElementTree : 0.0379, 0.0163, 0.0090, 0.0001 etree append_elements (T1 ) 2.6187 2.7251 2.8163 msec/pass, best: 2.6187 ElementTree append_elements (T1 ) 0.3295 0.3307 0.3304 msec/pass, best: 0.3295 cElementTree append_elements (T1 ) 0.0845 0.2258 0.0835 msec/pass, best: 0.0835 etree append_elements (T2 ) 19.6533 20.0642 18.7933 msec/pass, best: 18.7933 ElementTree append_elements (T2 ) 5.1974 4.9660 4.9829 msec/pass, best: 4.9660 cElementTree append_elements (T2 ) 0.8010 0.8131 1.3228 msec/pass, best: 0.8010 etree append_elements (T3 ) 0.2354 0.1766 0.1877 msec/pass, best: 0.1766 ElementTree append_elements (T3 ) 0.1077 0.1066 0.1087 msec/pass, best: 0.1066 cElementTree append_elements (T3 ) 0.0321 0.0330 0.0339 msec/pass, best: 0.0321 etree append_elements (T4 ) 0.8439 0.8159 1.3547 msec/pass, best: 0.8159 ElementTree append_elements (T4 ) 0.2296 0.2230 0.2199 msec/pass, best: 0.2199 cElementTree append_elements (T4 ) 0.0380 0.0364 0.0351 msec/pass, best: 0.0351 etree append_from_document (T1,T2 ) 23.6859 17.6534 14.8655 msec/pass, best: 14.8655 ElementTree append_from_document (T1,T2 ) 8.1959 8.4057 10.5931 msec/pass, best: 8.1959 cElementTree append_from_document (T1,T2 ) 0.4955 0.5058 0.4992 msec/pass, best: 0.4955 etree append_from_document (T1,T3 ) 1.0019 1.0577 1.6441 msec/pass, best: 1.0019 ElementTree append_from_document (T1,T3 ) 0.0825 0.0910 0.0844 msec/pass, best: 0.0825 cElementTree append_from_document (T1,T3 ) 0.0320 0.0305 0.0351 msec/pass, best: 0.0305 etree append_from_document (T1,T4 ) 1.2400 1.7096 1.9829 msec/pass, best: 1.2400 ElementTree append_from_document (T1,T4 ) 0.1672 0.1701 0.1688 msec/pass, best: 0.1672 cElementTree append_from_document (T1,T4 ) 0.0514 0.0545 0.0548 msec/pass, best: 0.0514 etree append_from_document (T2,T1 ) 27.1049 33.2417 33.2802 msec/pass, best: 27.1049 ElementTree append_from_document (T2,T1 ) 1.1742 1.1052 3.5085 msec/pass, best: 1.1052 cElementTree append_from_document (T2,T1 ) 0.0577 0.0683 0.0610 msec/pass, best: 0.0577 etree append_from_document (T2,T3 ) 0.9404 0.8878 0.9161 msec/pass, best: 0.8878 ElementTree append_from_document (T2,T3 ) 0.0856 0.0889 0.0909 msec/pass, best: 0.0856 cElementTree append_from_document (T2,T3 ) 0.0325 0.0311 0.0352 msec/pass, best: 0.0311 etree append_from_document (T2,T4 ) 1.6886 2.0050 1.9701 msec/pass, best: 1.6886 ElementTree append_from_document (T2,T4 ) 1.6004 2.6041 2.7645 msec/pass, best: 1.6004 cElementTree append_from_document (T2,T4 ) 0.0462 0.0494 0.0462 msec/pass, best: 0.0462 etree append_from_document (T3,T1 ) 23.2682 24.6881 24.8672 msec/pass, best: 23.2682 ElementTree append_from_document (T3,T1 ) 2.5431 2.8296 4.5559 msec/pass, best: 2.5431 cElementTree append_from_document (T3,T1 ) 0.0609 0.0653 0.0613 msec/pass, best: 0.0609 etree append_from_document (T3,T2 ) 11.9439 13.6612 13.1227 msec/pass, best: 11.9439 ElementTree append_from_document (T3,T2 ) 5.9978 6.3030 6.3133 msec/pass, best: 5.9978 cElementTree append_from_document (T3,T2 ) 0.5033 0.5084 0.5037 msec/pass, best: 0.5033 etree append_from_document (T3,T4 ) 0.3002 0.3107 0.2871 msec/pass, best: 0.2871 ElementTree append_from_document (T3,T4 ) 0.2445 0.1626 0.1605 msec/pass, best: 0.1605 cElementTree append_from_document (T3,T4 ) 0.0384 0.0334 0.0338 msec/pass, best: 0.0334 etree append_from_document (T4,T1 ) 24.0083 25.5595 25.3945 msec/pass, best: 24.0083 ElementTree append_from_document (T4,T1 ) 0.1816 0.1750 0.1844 msec/pass, best: 0.1750 cElementTree append_from_document (T4,T1 ) 0.0653 0.0677 0.0679 msec/pass, best: 0.0653 etree append_from_document (T4,T2 ) 13.1701 13.0942 13.2213 msec/pass, best: 13.0942 ElementTree append_from_document (T4,T2 ) 5.0062 5.2756 5.7883 msec/pass, best: 5.0062 cElementTree append_from_document (T4,T2 ) 0.5210 0.5819 0.5079 msec/pass, best: 0.5079 etree append_from_document (T4,T3 ) 0.5563 1.2271 0.6637 msec/pass, best: 0.5563 ElementTree append_from_document (T4,T3 ) 0.0805 0.0755 0.0736 msec/pass, best: 0.0736 cElementTree append_from_document (T4,T3 ) 0.0276 0.0250 0.0254 msec/pass, best: 0.0250 etree clear (T1 ) 8.5457 7.9606 7.4105 msec/pass, best: 7.4105 ElementTree clear (T1 ) 17.8255 18.8504 17.0351 msec/pass, best: 17.0351 cElementTree clear (T1 ) 2.1414 2.3636 2.9883 msec/pass, best: 2.1414 etree clear (T2 ) 16.9409 7.0505 17.4210 msec/pass, best: 7.0505 ElementTree clear (T2 ) 38.2996 37.6155 27.9877 msec/pass, best: 27.9877 cElementTree clear (T2 ) 2.4261 2.3950 2.3893 msec/pass, best: 2.3893 etree clear (T3 ) 0.4994 0.4925 0.4937 msec/pass, best: 0.4925 ElementTree clear (T3 ) 4.3199 4.4805 4.4340 msec/pass, best: 4.3199 cElementTree clear (T3 ) 0.4300 0.4456 0.4420 msec/pass, best: 0.4300 etree clear (T4 ) 0.0230 0.0251 0.0234 msec/pass, best: 0.0230 ElementTree clear (T4 ) 0.0522 0.0501 0.0515 msec/pass, best: 0.0501 cElementTree clear (T4 ) 0.0070 0.0069 0.0069 msec/pass, best: 0.0069 etree create_subelements (T1 ) 0.8444 0.8633 0.8598 msec/pass, best: 0.8444 ElementTree create_subelements (T1 ) 0.5108 0.4110 0.4049 msec/pass, best: 0.4049 cElementTree create_subelements (T1 ) 0.0613 0.0671 0.0666 msec/pass, best: 0.0613 etree create_subelements (T2 ) 16.4280 15.6007 17.4013 msec/pass, best: 15.6007 ElementTree create_subelements (T2 ) 6.4784 6.5251 6.5057 msec/pass, best: 6.4784 cElementTree create_subelements (T2 ) 0.6267 0.5625 0.5439 msec/pass, best: 0.5439 etree create_subelements (T3 ) 0.1782 0.1495 0.1590 msec/pass, best: 0.1495 ElementTree create_subelements (T3 ) 0.1202 0.1270 0.1189 msec/pass, best: 0.1189 cElementTree create_subelements (T3 ) 0.0295 0.0281 0.0321 msec/pass, best: 0.0281 etree create_subelements (T4 ) 0.7118 0.7083 0.7148 msec/pass, best: 0.7083 ElementTree create_subelements (T4 ) 0.2945 0.2923 0.2944 msec/pass, best: 0.2923 cElementTree create_subelements (T4 ) 0.0219 0.0216 0.0228 msec/pass, best: 0.0216 etree insert_from_document (T1,T2 ) 33.0793 23.2559 23.3976 msec/pass, best: 23.2559 ElementTree insert_from_document (T1,T2 ) 9.5483 10.5742 11.7306 msec/pass, best: 9.5483 cElementTree insert_from_document (T1,T2 ) 1.5568 1.3950 1.3709 msec/pass, best: 1.3709 etree insert_from_document (T1,T3 ) 3.3307 3.2447 3.6380 msec/pass, best: 3.2447 ElementTree insert_from_document (T1,T3 ) 0.1029 0.0960 0.1061 msec/pass, best: 0.0960 cElementTree insert_from_document (T1,T3 ) 0.0406 0.0423 0.0431 msec/pass, best: 0.0406 etree insert_from_document (T1,T4 ) 1.7418 2.0915 2.1230 msec/pass, best: 1.7418 ElementTree insert_from_document (T1,T4 ) 0.2430 0.2482 0.2488 msec/pass, best: 0.2430 cElementTree insert_from_document (T1,T4 ) 0.0777 0.0859 0.0809 msec/pass, best: 0.0777 etree insert_from_document (T2,T1 ) 34.0752 31.5777 35.4281 msec/pass, best: 31.5777 ElementTree insert_from_document (T2,T1 ) 2.6473 2.5387 4.7799 msec/pass, best: 2.5387 cElementTree insert_from_document (T2,T1 ) 0.1180 0.1313 0.1245 msec/pass, best: 0.1180 etree insert_from_document (T2,T3 ) 1.2871 1.4429 1.5116 msec/pass, best: 1.2871 ElementTree insert_from_document (T2,T3 ) 0.1033 0.1039 0.1071 msec/pass, best: 0.1033 cElementTree insert_from_document (T2,T3 ) 0.0471 0.0501 0.0499 msec/pass, best: 0.0471 etree insert_from_document (T2,T4 ) 1.9967 1.9259 2.0996 msec/pass, best: 1.9259 ElementTree insert_from_document (T2,T4 ) 2.2778 2.2210 2.9068 msec/pass, best: 2.2210 cElementTree insert_from_document (T2,T4 ) 0.1068 0.1087 0.1072 msec/pass, best: 0.1068 etree insert_from_document (T3,T1 ) 20.2503 23.9721 21.2222 msec/pass, best: 20.2503 ElementTree insert_from_document (T3,T1 ) 3.3407 2.8879 3.7921 msec/pass, best: 2.8879 cElementTree insert_from_document (T3,T1 ) 0.1046 0.0877 0.0832 msec/pass, best: 0.0832 etree insert_from_document (T3,T2 ) 18.5366 20.5677 21.1396 msec/pass, best: 18.5366 ElementTree insert_from_document (T3,T2 ) 25.1812 8.6554 8.6306 msec/pass, best: 8.6306 cElementTree insert_from_document (T3,T2 ) 1.3172 1.3074 1.3212 msec/pass, best: 1.3074 etree insert_from_document (T3,T4 ) 0.3818 0.3595 0.3517 msec/pass, best: 0.3517 ElementTree insert_from_document (T3,T4 ) 0.3012 0.2785 0.2326 msec/pass, best: 0.2326 cElementTree insert_from_document (T3,T4 ) 0.0627 0.0581 0.0589 msec/pass, best: 0.0581 etree insert_from_document (T4,T1 ) 24.0863 25.1853 24.8056 msec/pass, best: 24.0863 ElementTree insert_from_document (T4,T1 ) 0.2589 0.2595 0.2536 msec/pass, best: 0.2536 cElementTree insert_from_document (T4,T1 ) 0.0936 0.0983 0.0967 msec/pass, best: 0.0936 etree insert_from_document (T4,T2 ) 21.3952 22.1335 22.2327 msec/pass, best: 21.3952 ElementTree insert_from_document (T4,T2 ) 6.7473 6.9179 7.2210 msec/pass, best: 6.7473 cElementTree insert_from_document (T4,T2 ) 1.3629 1.3921 1.3564 msec/pass, best: 1.3564 etree insert_from_document (T4,T3 ) 0.5727 0.6047 0.5907 msec/pass, best: 0.5727 ElementTree insert_from_document (T4,T3 ) 0.0950 0.0929 0.0976 msec/pass, best: 0.0929 cElementTree insert_from_document (T4,T3 ) 0.0338 0.0373 0.0339 msec/pass, best: 0.0338 etree reorder (T1 ) 13.7370 13.4423 14.8938 msec/pass, best: 13.4423 ElementTree reorder (T1 ) 0.1945 0.8481 1.6554 msec/pass, best: 0.1945 cElementTree reorder (T1 ) 0.0658 0.0709 0.0663 msec/pass, best: 0.0658 etree reorder (T2 ) 18.3126 20.8942 20.8194 msec/pass, best: 18.3126 ElementTree reorder (T2 ) 5.2827 5.5325 5.6348 msec/pass, best: 5.2827 cElementTree reorder (T2 ) 1.1879 1.1766 1.1588 msec/pass, best: 1.1588 etree reorder (T3 ) 0.0151 0.0163 0.0158 msec/pass, best: 0.0151 ElementTree reorder (T3 ) 0.0417 0.0436 0.0410 msec/pass, best: 0.0410 cElementTree reorder (T3 ) 0.0247 0.0242 0.0233 msec/pass, best: 0.0233 etree reorder (T4 ) 0.1560 0.1559 0.1550 msec/pass, best: 0.1550 ElementTree reorder (T4 ) 0.1251 0.1220 0.1210 msec/pass, best: 0.1210 cElementTree reorder (T4 ) 0.0213 0.0214 0.0236 msec/pass, best: 0.0213 etree reorder_slice (T1 ) 12.0721 13.7968 15.4897 msec/pass, best: 12.0721 ElementTree reorder_slice (T1 ) 0.2232 0.2023 0.2043 msec/pass, best: 0.2023 cElementTree reorder_slice (T1 ) 0.0591 0.0645 0.0654 msec/pass, best: 0.0591 etree reorder_slice (T2 ) 20.7641 21.2409 20.5686 msec/pass, best: 20.5686 ElementTree reorder_slice (T2 ) 5.5664 5.8027 5.8425 msec/pass, best: 5.5664 cElementTree reorder_slice (T2 ) 1.2022 1.1533 1.2419 msec/pass, best: 1.1533 etree reorder_slice (T3 ) 0.0146 0.0133 0.0170 msec/pass, best: 0.0133 ElementTree reorder_slice (T3 ) 0.0406 0.0449 0.0415 msec/pass, best: 0.0406 cElementTree reorder_slice (T3 ) 0.0232 0.0232 0.0237 msec/pass, best: 0.0232 etree reorder_slice (T4 ) 0.1669 0.1637 0.1630 msec/pass, best: 0.1630 ElementTree reorder_slice (T4 ) 0.1264 0.1288 0.1269 msec/pass, best: 0.1264 cElementTree reorder_slice (T4 ) 0.0229 0.0211 0.0217 msec/pass, best: 0.0211 etree replace_children (T1 ) 8.0109 8.5548 8.8374 msec/pass, best: 8.0109 ElementTree replace_children (T1 ) 19.4384 19.5091 19.5183 msec/pass, best: 19.4384 cElementTree replace_children (T1 ) 2.0199 2.0196 2.0339 msec/pass, best: 2.0196 etree replace_children (T2 ) 28.7735 29.8588 31.2469 msec/pass, best: 28.7735 ElementTree replace_children (T2 ) 28.4966 30.1117 27.4139 msec/pass, best: 27.4139 cElementTree replace_children (T2 ) 2.9685 3.0111 3.1016 msec/pass, best: 2.9685 etree replace_children (T3 ) 0.7104 0.6892 0.7067 msec/pass, best: 0.6892 ElementTree replace_children (T3 ) 4.5159 4.5425 4.4612 msec/pass, best: 4.4612 cElementTree replace_children (T3 ) 0.4480 0.4526 0.4497 msec/pass, best: 0.4480 etree replace_children (T4 ) 0.9078 0.9043 0.8908 msec/pass, best: 0.8908 ElementTree replace_children (T4 ) 0.3466 0.3405 0.3500 msec/pass, best: 0.3405 cElementTree replace_children (T4 ) 0.0381 0.0384 0.0368 msec/pass, best: 0.0368 etree rotate_children (T1 ) 27.8303 28.3840 28.3697 msec/pass, best: 27.8303 ElementTree rotate_children (T1 ) 1.2922 1.1920 1.1607 msec/pass, best: 1.1607 cElementTree rotate_children (T1 ) 0.1670 0.1657 0.1693 msec/pass, best: 0.1657 etree rotate_children (T2 ) 7.5876 8.5908 8.6592 msec/pass, best: 7.5876 ElementTree rotate_children (T2 ) 1.7101 1.3314 1.3988 msec/pass, best: 1.3314 cElementTree rotate_children (T2 ) 0.4529 0.4038 0.5509 msec/pass, best: 0.4038 etree rotate_children (T3 ) 4.5568 4.5938 4.4606 msec/pass, best: 4.4606 ElementTree rotate_children (T3 ) 0.6129 0.5613 0.5740 msec/pass, best: 0.5613 cElementTree rotate_children (T3 ) 0.1412 0.1379 0.1383 msec/pass, best: 0.1379 etree rotate_children (T4 ) 0.8887 0.8646 0.8843 msec/pass, best: 0.8646 ElementTree rotate_children (T4 ) 0.5087 0.5158 0.5187 msec/pass, best: 0.5087 cElementTree rotate_children (T4 ) 0.1269 0.1282 0.1233 msec/pass, best: 0.1233
Stefan Behnel wrote:
Fredrik Lundh wrote:
Stefan Behnel wrote:
in the end you will not be very impressed. One of the results of the benchmarks is that ElementTree beats lxml sometimes and that cElementTree beats lxml in most cases.
can you post a copy of the results ?
Here you go. [...]
Hi, just wanted to add a note that the results of the comparison actually do depend on what benchmarks you run. Here's an example where lxml is pretty competitive. I'll add more benchmarks to the script over time. def bench_remove_children(self, root): for child in root: root.remove(child) def bench_remove_children_reversed(self, root): for child in reversed(root[:]): root.remove(child) Stefan etree remove_nodes (T1 ) 7.1806 7.8207 7.5744 msec/pass, best: 7.1806 ElementTree remove_nodes (T1 ) 9.9351 10.3656 10.2434 msec/pass, best: 9.9351 cElementTree remove_nodes (T1 ) 1.1753 1.1938 1.1930 msec/pass, best: 1.1753 etree remove_nodes (T2 ) 10.7585 11.1049 11.0373 msec/pass, best: 10.7585 ElementTree remove_nodes (T2 ) 163.0597 163.6652 163.5988 msec/pass, best: 163.0597 cElementTree remove_nodes (T2 ) 4.5629 4.6345 4.6852 msec/pass, best: 4.5629 etree remove_nodes (T3 ) 0.4624 0.4984 0.4635 msec/pass, best: 0.4624 ElementTree remove_nodes (T3 ) 3.1772 3.1977 3.1922 msec/pass, best: 3.1772 cElementTree remove_nodes (T3 ) 0.3280 0.3293 0.3732 msec/pass, best: 0.3280 etree remove_nodes (T4 ) 0.1855 0.1881 0.2297 msec/pass, best: 0.1855 ElementTree remove_nodes (T4 ) 0.4550 0.4557 0.4541 msec/pass, best: 0.4541 cElementTree remove_nodes (T4 ) 0.0217 0.0215 0.0216 msec/pass, best: 0.0215 etree remove_nodes_reversed (T1 ) 8.6140 7.7091 7.2880 msec/pass, best: 7.2880 ElementTree remove_nodes_reversed (T1 ) 19.3782 18.9275 18.9883 msec/pass, best: 18.9275 cElementTree remove_nodes_reversed (T1 ) 2.2662 2.2573 2.2869 msec/pass, best: 2.2573 etree remove_nodes_reversed (T2 ) 12.0817 12.6200 13.0714 msec/pass, best: 12.0817 ElementTree remove_nodes_reversed (T2 ) 648.7812 647.7359 671.5900 msec/pass, best: 647.7359 cElementTree remove_nodes_reversed (T2 ) 12.8756 12.9411 12.8823 msec/pass, best: 12.8756 etree remove_nodes_reversed (T3 ) 0.3564 0.3560 0.3582 msec/pass, best: 0.3560 ElementTree remove_nodes_reversed (T3 ) 4.4038 4.4472 4.3877 msec/pass, best: 4.3877 cElementTree remove_nodes_reversed (T3 ) 0.4653 0.4736 0.4737 msec/pass, best: 0.4653 etree remove_nodes_reversed (T4 ) 0.1996 0.1971 0.1951 msec/pass, best: 0.1951 ElementTree remove_nodes_reversed (T4 ) 1.6460 1.6219 1.6266 msec/pass, best: 1.6219 cElementTree remove_nodes_reversed (T4 ) 0.0534 0.0503 0.0538 msec/pass, best: 0.0503
participants (3)
-
Fredrik Lundh
-
Martijn Faassen
-
Stefan Behnel