Your problem is that vertex arrays are, by nature, slow.
Imagine trying to specify your plane via glVertex3f and glNormal3f calls. If you're familiar with these, you know that they're fairly slow. This is because ALL of the geometry and normal data for the entire object must be passed over the graphics bus to the graphics card each frame. Not speedy.
Vertex arrays act similarly. The gl_____Pointer commands, when used like this, pass all the data over the graphics bus. Again, = slow.
Two solutions: display lists or VBOs. VBOs are newer, and therefore are recommended. They're also more complicated. I recommend PyOpenGL's built-in VBO class, available with "from OpenGL.arrays import vbo". Display lists are notably simpler, but they're technically deprecated (though I predict they won't be removed for at least another 15 years) and not as flexible (most notably, they can't be dynamically updated). Google should provide you with implementation specific for each.