Hi Lorenzo,

Thanks for the script, and great that you could identify cmd.sync() as the 
culprit. I looked at the code, cmd.do("cmd.sync()") literally blocks itself 
until it times out after 1 second. cmd.do() puts commands in a queue, and 
cmd.sync() tries to ensure that all queued commands have been executed. PyMOL 
calls cmd.sync() in a few places right before capturing an image for example.

Not sure how this could be improved. Maybe cmd.sync() should print a warning if 
it times out, that would help to notice a self-lock.

Cheers,
  Thomas


> On Dec 17, 2019, at 11:42 AM, Lorenzo Gaifas <bris...@gmail.com> wrote:
> 
> After playing around with it a bit longer, it's clear that I misunderstood. 
> The issue was not with `cmd.alter` nor with `cmd.show_as`, but with 
> `cmd.sync`.
> 
> I was calling many times a smaller function that contained `cmd.sync()`, 
> which resulted - it seems - in all these calls piling up.
> 
> Still, I don't know if it's intended behaviour for `sync` to be so much 
> slower if it's called as a pymol function. Attached you will find a minimal 
> working example to show the difference.
> 
> 
> Il giorno lun 16 dic 2019 alle ore 17:52 Thomas Holder 
> <thomas.hol...@schrodinger.com> ha scritto:
> OK thanks. I haven't seen such performance differences before and couldn't 
> reproduce it so far. Could you share your script (and data files if possible) 
> with me?
> 
> Thanks,
>   Thomas
> 
> 
> > On Dec 16, 2019, at 5:42 PM, Lorenzo Gaifas <bris...@gmail.com> wrote:
> > 
> > Yes, it does. Both cases are with the GUI and ewual graphical 
> > representation.
> > 
> > On Mon, Dec 16, 2019, 17:37 Thomas Holder <thomas.hol...@schrodinger.com> 
> > wrote:
> > Hi Lorenzo,
> > 
> > When you say "run from a python script", is that with the graphical GUI? 
> > That "instant update", does that include instant update of visual 
> > representations?
> > 
> > Thanks,
> >   Thomas
> > 
> > 
> > > On Dec 13, 2019, at 12:55 PM, Lorenzo Gaifas <bris...@gmail.com> wrote:
> > > 
> > > Dear Pymol users,
> > > 
> > > I just discovered something I did not expect: the same python function 
> > > can have extremely different performance when called as a python function 
> > > or using the pymol api.
> > > 
> > > To be more specific: I have a function func that (among other things) 
> > > uses cmd.alter several times over a big system to change the properties 
> > > and representation.
> > > 
> > > If I run it calling func() from a python script, its effects are almost 
> > > instant. If I call it with cmd.do('func') (or directly from within pymol 
> > > with func), it’s extremely slow (up to 10 seconds) and Pymol freezes 
> > > completely during this time.
> > > 
> > > I expected this to be due to an overhead of the api itself, but when I do 
> > > the same thing with a simpler function, I see no noticeable difference.
> > > 
> > > Why exactly is this happening? And more importantly, how can I get the 
> > > performance of func even when I call it from within pymol?
> > > 
> > > Thank you,
> > > Lorenzo
> > > 
> > > _______________________________________________
> > > PyMOL-users mailing list
> > > Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
> > > Unsubscribe: 
> > > https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe
> > 
> > --
> > Thomas Holder
> > PyMOL Principal Developer
> > Schrödinger, Inc.
> > 
> 
> --
> Thomas Holder
> PyMOL Principal Developer
> Schrödinger, Inc.
> 
> <slow.py>

--
Thomas Holder
PyMOL Principal Developer
Schrödinger, Inc.



_______________________________________________
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe

Reply via email to