Commit 8d935010 authored by Kevin Deldycke's avatar Kevin Deldycke

Second patch

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11928 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent b1d3757c
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# Authors: Nik Kim <fafhrd@legco.biz> # Authors: Nik Kim <fafhrd@legco.biz>
__version__ = '$Revision: 1.3 $'[11:-2] __version__ = '$Revision: 1.3 $'[11:-2]
import sys, time import sys, time, threading
from DateTime import DateTime from DateTime import DateTime
from Globals import InitializeClass from Globals import InitializeClass
from OFS.SimpleItem import SimpleItem from OFS.SimpleItem import SimpleItem
...@@ -16,6 +16,8 @@ from Products.PageTemplates.PageTemplateFile import PageTemplateFile ...@@ -16,6 +16,8 @@ from Products.PageTemplates.PageTemplateFile import PageTemplateFile
current_version = 1 current_version = 1
processing_lock = threading.Lock()
class TimerService(SimpleItem): class TimerService(SimpleItem):
""" timer service, all objects that wants timer """ timer service, all objects that wants timer
event subscribe here """ event subscribe here """
...@@ -49,23 +51,31 @@ class TimerService(SimpleItem): ...@@ -49,23 +51,31 @@ class TimerService(SimpleItem):
def process_timer(self, interval): def process_timer(self, interval):
""" """ """ """
# Try to acquire a lock, to make sure we only run one processing at a
# time, and abort if another processing is currently running
acquired = processing_lock.acquire(0)
if not acquired:
return
subscriptions = [self.unrestrictedTraverse(path) subscriptions = [self.unrestrictedTraverse(path)
for path in self._subscribers] for path in self._subscribers]
tick = time.time() tick = time.time()
# prev_tick = tick - interval prev_tick = tick - interval
# next_tick = tick + interval next_tick = tick + interval
# LOG('TimerService', INFO, 'Ttimer tick at %s\n'%time.ctime(tick)) # LOG('TimerService', INFO, 'Ttimer tick at %s\n'%time.ctime(tick))
for subscriber in subscriptions: for subscriber in subscriptions:
try: try:
# subscriber.process_timer( subscriber.process_timer(
# interval, DateTime(tick), DateTime(prev_tick), DateTime(next_tick)) interval, DateTime(tick), DateTime(prev_tick), DateTime(next_tick))
subscriber.process_timer(tick, interval)
except: except:
LOG('TimerService', ERROR, 'Process timer error', error = sys.exc_info()) LOG('TimerService', ERROR, 'Process timer error', error = sys.exc_info())
# When processing is done, release the lock
processing_lock.release()
def subscribe(self, ob): def subscribe(self, ob):
""" """ """ """
path = '/'.join(ob.getPhysicalPath()) path = '/'.join(ob.getPhysicalPath())
...@@ -103,8 +113,6 @@ class TimerService(SimpleItem): ...@@ -103,8 +113,6 @@ class TimerService(SimpleItem):
""" """ """ """
subs = self.lisSubscriptions() subs = self.lisSubscriptions()
#LOG('asdd',INFO,subs)
remove_list = [subs[n] for n in [int(n) for n in no]] remove_list = [subs[n] for n in [int(n) for n in no]]
for sub in remove_list: for sub in remove_list:
......
...@@ -6,10 +6,7 @@ __version__ = 'TimerServer for Zope 0.1' ...@@ -6,10 +6,7 @@ __version__ = 'TimerServer for Zope 0.1'
import traceback import traceback
import thread import thread
import sys, os, errno, time, socket import sys, os, errno, time, socket
import ZPublisher.Client
from StringIO import StringIO from StringIO import StringIO
from zLOG import LOG, INFO from zLOG import LOG, INFO
...@@ -20,7 +17,7 @@ from ZPublisher.HTTPRequest import HTTPRequest ...@@ -20,7 +17,7 @@ from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher import Client from ZPublisher import Client
class TimerServer: class TimerServer:
def __init__(self, module, interval=5): def __init__(self, module, interval=600):
self.module = module self.module = module
self.interval = interval self.interval = interval
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment