Thanks for the suggestions. I was implementing something like Dima's suggestion and noticed that the function has 3 different return statements, one of which is not normal (some runtime error in Magma) but two are normal and only one of those had the mag.quit() in it. However I don't think that this was the cause of the problem since I did not see any idle Magma processes lying about, and also I know from my output that the rogue return route was not used (I am looking for elliptic curves and these runs had 100% success).
So I just started a run with all calls to the function using the same Magma() instance, and after a few minutes when the function had been called about 50 times there were already hundreds of these python processes, all clocking between 0 and 4s and asleep. Bizarre. Perhaps I'll try the @fork route. John On 5 June 2017 at 19:24, William Stein <[email protected]> wrote: > On Mon, Jun 5, 2017 at 11:21 AM, Dima Pasechnik <[email protected]> wrote: >> I guess these zombie processes come from the function quitting Magma, >> something that does not destroy a Python child process used to communicate >> with it. >> >> Why won't you create a Magma instance just once, and do a cleanup after your >> function is done? >> (IIRC, Magma does not have a "reset" facility, but you can still "delete" >> variables.) (Well, this would be tedious, >> perhaps these deletes are called by Sage interface?) > > Another hack/workaround *might* be to use Sage's @fork or @parallel > decorators... > >> >> On the other hand, there is also stuff in sage.interfaces.quit.* you can >> probably use to clean up, >> as well as sage.interfaces.cleaner.* - which is even less documented, and >> it's hard to say exactly what to do >> with is. A documentation bug? >> >> >> >> >> On Monday, June 5, 2017 at 2:44:32 PM UTC+1, John Cremona wrote: >>> >>> On a linux (ubuntu 16.04) machine I am running one instance of Sage >>> version 7.6. In a loop I am calling a function of my own which >>> interfaces to Magma; that function starts with >>> >>> mag = Magma() >>> >>> then there are a whole lot of mag.eval() statements and af ew others >>> with which I collect the content of Magma variable back into Sage, and >>> the last line before the function returns is >>> >>> mag.quit() >>> >>> Once this has been running for a while, I have --as expected-- exactly >>> one magma process running. But there are many defunct python >>> processes (right now, 1375 lines like >>> jec 59385 0.0 0.0 0 0 pts/11 Z+ 12:30 0:00 >>> [python] <defunct> >>> in the output of ps -ux | grep python) whose times stamps show that >>> many per second were created. These are all child processes of the >>> controlling Sage process. They seem harmless since they are not using >>> any resources, but I had 5 such Sage sessions running overnight and >>> this morning could not log into the machine for a while and I suspect >>> (without proof) that some maximum number of processes was exceeded -- >>> when I did log in, I saw that all 5 of the Sage processes had been >>> killed and showed an error message about not being able to fork(). >>> The computer has 512g of RAM and 72 cores, and was not heavily loaded. >>> >>> Help please! >>> >>> I am attaching the function in question in case that helps. >>> >>> John >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sage-support" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at https://groups.google.com/group/sage-support. >> For more options, visit https://groups.google.com/d/optout. > > > > -- > William (http://wstein.org) > > -- > You received this message because you are subscribed to the Google Groups > "sage-support" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
