Dieter Maurer wrote:
Max M wrote at 2005-6-27 15:53 +0200:

...
So in a external method/module I have a function like this:

BUSY_STATE = 0
def sync_in_progress(busy=None):
   global BUSY_STATE
   if busy is None:
       return BUSY_STATE
   else:
       BUSY_STATE = busy


Note that this is likely to fail.

The module containing an External Method is maintained in the
ZODB cache. As a consequence, each worker gets its own copy
and you cannot synchronize via global variables of such modules.

Use a true Python module (note that Zope does not import
the source file of an External Method; therefore, it is
not inside a module in the Python sense) when you need
synchronization via global module level variables.

I wrote a small tool and ended up with this:

BUSY_STATE = 0

def sync_in_progress(busy=None):
    global BUSY_STATE
    print '----------------'
    print 'BUSY_STATE:', BUSY_STATE, 'busy:', busy
    print ''
    if not busy is None:
        BUSY_STATE = busy
    return BUSY_STATE

class Syncer(UniqueObject, PropertyManager,
                       SimpleItem.SimpleItem, ActionProviderBase):

    def redirect(self, url):
        self.REQUEST.RESPONSE.redirect(url)

    def reset(self):
        "reset"
        return repr(sync_in_progress(0))

    def sync(self):
        "Syncs"
        print '##################'
        print 'sync start'
        if not sync_in_progress():
            sync_in_progress(1)
            self.redirect('%s/sync_action' % self.absolute_url())
        else:
            return 'SYNC: in progress'

    def sync_action(self):
        "sync_action"
        # do stuff
        sync_in_progress(1)
        self.sync_calendar()
        self.sync_email()
        sync_in_progress(0)
        return 'SYNC: done'

It doesn't seem to work without the redirect. Which is the reason for having both a sync and a sync_action method.

--

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science

_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to