[Zope] Time-consuming External method blocks Zope execution
Jerome Alet
alet@unice.fr
Wed, 13 Jun 2001 09:48:47 +0200 (MET DST)
On Wed, 13 Jun 2001, Etienne Labuschagne wrote:
> I know that I can make my long process run in a thread and return
> immediately, but how do I notify the client browser when the thread have
> finally finished. Is the only way to write a self-reloading page as
> response for the client so that his browser checks every now and again if
> the process is finished
There's a solution for that, I've used it in a CGI script to solve a
browser (or Apache) timeout problem when launching long SQL queries, but
have not implemented it in Zope, so I don't know how this would apply to
Zope.
you have to return a document which content-type is:
multipart/x-mixed-replace;boundary=XXX
where XXX is some random string.
the first line of you document must contain:
--XXX (same XXX as before)
then you launch a thread which periodically send a normal CGI document
(with headers, and content-type=text/html for example) displaying for
example the elapsed time since you've begun to convert files, but this
document must end with "\n--%s" % XXX (still same XXX as above)
then you start to convert files.
During the conversion your thread will periodically send a new page to
your browser, so you can display in it as many info as you want: elapsed
time, number of converted files, etc...
when it's finished you end the thread.
then you finish the enclosing CGI document which content type is
multipart/x-mixed-replace, terminating it with:
"\n--%s--" % XXX (still same XXX)
then it's done.
I don't know if this would work at all in Zope, but I suppose you can try
this way.
Anyway I can send to you my python CGI script if you want.
bye,
Jerome Alet