On Friday, August 9, 2013, Daniel Drake wrote:

> Hi,
>
> "from gi.repository import Gtk" naturally triggers the Gtk overrides
> file to be imported, and the nature of Python is that this causes a
> lot of work to be done. For example, for each class defined there, it
> goes ahead and sets up the GObjectMeta, class hierarchies, MRO
> calculations, etc.
>
> The GTK overrides file is big and some apps will not even use any of
> the hierarchies that are now being prepared. It would be nice if we
> could do this lazily.
>
> I am experimenting with a lazy loading approach where the class
> definitions are placed in specially decorated functions. Python does
> not "descend" into such functions at import time. This causes a 25%
> improvement in "import Gtk" timing (which actually brings us down to
> pygtk2 import speed).


Great job, nice to see some optimzation love.

pygtk2 is not very efficient, it registers all classes on both c and python
side
when importing it, including creating a few thousand function wrappers.

It would be interesting to see what gi is doing to try to bring this time
down.

When I first started pygi (or pybank as it was called then) it would import
pretty
much instantaneously, but I guess it didnt do many things back then.
But that is sort of the point, there shouldnt be a lot of things that _has_
to
be done, lazily should work for almost everything, including importing
dependencies.


>
> The way to override a class in overrides is now:
>
> @class_override('Widget')
> def override_Widget():
>     class Widget(Gtk.Widget)
>         [...]
>
>      return Widget
>
> There is a new consideration if you want to access the overridden
> Widget class from another point in the overrides file - you have to go
> up to the DynamicModule instance to find it.
>
> http://dev.laptop.org/~dsd/20130809/class_override.patch
>
> I have ported Gtk and parts of GObject and GLib.
>
> Before I continue with this and open a bug I would be interested in
> any quick comments.
>
> Specifically, should I be worried about breaking the API between
> overrides and the core, or can I break it without worrying about
> back-compat?
>
> Right now it is backwards compatible but for cleanliness and
> efficiency I would prefer to remove the old way after porting all
> users.
>
> Thanks
> Daniel
> _______________________________________________
> python-hackers-list mailing list
> python-hackers-list@gnome.org <javascript:;>
> https://mail.gnome.org/mailman/listinfo/python-hackers-list
>


-- 
Johan Dahlin
Async Serviços de Informatica Ltda.
Sócio / Diretor
+ 55 16 3376 0125
+ 55 16 9112 6219
_______________________________________________
python-hackers-list mailing list
python-hackers-list@gnome.org
https://mail.gnome.org/mailman/listinfo/python-hackers-list

Reply via email to