Merging mainline changes.

This commit is contained in:
lagos 2012-09-28 00:25:53 -07:00
commit ed60c3046f
3 changed files with 15 additions and 17 deletions

View file

@ -278,7 +278,8 @@ def spawnProcess(processProtocol, bootstrap, args=(), env={},
pythonpath = [] pythonpath = []
for pkg in packages: for pkg in packages:
p = os.path.split(imp.find_module(pkg)[1])[0] pkg_path, name = os.path.split(pkg)
p = os.path.split(imp.find_module(name, [pkg_path] if pkg_path else None)[1])[0]
if p.startswith(os.path.join(sys.prefix, 'lib')): if p.startswith(os.path.join(sys.prefix, 'lib')):
continue continue
pythonpath.append(p) pythonpath.append(p)

View file

@ -24,6 +24,7 @@ file locking clashes. Test what works with your mileage.
""" """
import os import os
import sys
from django.conf import settings from django.conf import settings
@ -85,21 +86,20 @@ def start_plugin_services(server):
apackages = ("twisted", apackages = ("twisted",
os.path.join(os.pardir, "contrib", "procpools", "ampoule"), os.path.join(os.pardir, "contrib", "procpools", "ampoule"),
os.path.join(os.pardir, "ev"), os.path.join(os.pardir, "ev"),
os.path.join(os.pardir)) "settings")
aenv = {"DJANGO_SETTINGS_MODULE":"settings", aenv = {"DJANGO_SETTINGS_MODULE":"settings",
"DATABASE_NAME":settings.DATABASES.get("default", {}).get("NAME") or settings.DATABASE_NAME} "DATABASE_NAME":settings.DATABASES.get("default", {}).get("NAME") or settings.DATABASE_NAME}
if PROCPOOL_DEBUG: if PROCPOOL_DEBUG:
_BOOTSTRAP = _BOOTSTRAP % "log.startLogging(sys.stderr)" _BOOTSTRAP = _BOOTSTRAP % "log.startLogging(sys.stderr)"
else: else:
_BOOTSTRAP = _BOOTSTRAP % "" _BOOTSTRAP = _BOOTSTRAP % ""
procpool_starter = ampoule_main.ProcessStarter(packages=apackages, procpool_starter = ampoule_main.ProcessStarter(packages=apackages,
env=aenv, env=aenv,
path=PROCPOOL_DIRECTORY, path=PROCPOOL_DIRECTORY,
uid=PROCPOOL_UID, uid=PROCPOOL_UID,
gid=PROCPOOL_GID, gid=PROCPOOL_GID,
bootstrap=_BOOTSTRAP, bootstrap=_BOOTSTRAP,
childReactor=os.name == 'nt' and "select" or "epoll") childReactor=sys.platform == 'linux2' and "epoll" or "default")
procpool = ampoule_pool.ProcessPool(name=SERVICE_NAME, procpool = ampoule_pool.ProcessPool(name=SERVICE_NAME,
min=PROCPOOL_MIN_NPROC, min=PROCPOOL_MIN_NPROC,
max=PROCPOOL_MAX_NPROC, max=PROCPOOL_MAX_NPROC,

View file

@ -72,8 +72,8 @@ class WebClient(resource.Resource):
def _responseFailed(self, failure, suid, request): def _responseFailed(self, failure, suid, request):
"callback if a request is lost/timed out" "callback if a request is lost/timed out"
try: try:
self.requests.get(suid, []).remove(request) del self.requests[suid]
except ValueError: except KeyError:
pass pass
def lineSend(self, suid, string, data=None): def lineSend(self, suid, string, data=None):
@ -81,13 +81,12 @@ class WebClient(resource.Resource):
This adds the data to the buffer and/or sends it to This adds the data to the buffer and/or sends it to
the client as soon as possible. the client as soon as possible.
""" """
requests = self.requests.get(suid, None) request = self.requests.get(suid)
if requests: if request:
request = requests.pop(0)
# we have a request waiting. Return immediately. # we have a request waiting. Return immediately.
request.write(jsonify({'msg':string, 'data':data})) request.write(jsonify({'msg':string, 'data':data}))
request.finish() request.finish()
self.requests[suid] = requests del self.requests[suid]
else: else:
# no waiting request. Store data in buffer # no waiting request. Store data in buffer
dataentries = self.databuffer.get(suid, []) dataentries = self.databuffer.get(suid, [])
@ -99,9 +98,8 @@ class WebClient(resource.Resource):
Disconnect session with given suid. Disconnect session with given suid.
""" """
if self.requests.has_key(suid): if self.requests.has_key(suid):
for request in self.requests.get(suid, []): self.requests[suid].finish()
request.finish() del self.requests[suid]
del self.requests[suid]
if self.databuffer.has_key(suid): if self.databuffer.has_key(suid):
del self.databuffer[suid] del self.databuffer[suid]
@ -119,7 +117,6 @@ class WebClient(resource.Resource):
if suid == '0': if suid == '0':
# creating a unique id hash string # creating a unique id hash string
suid = md5(str(time.time())).hexdigest() suid = md5(str(time.time())).hexdigest()
self.requests[suid] = []
self.databuffer[suid] = [] self.databuffer[suid] = []
sess = WebClientSession() sess = WebClientSession()
@ -160,10 +157,10 @@ class WebClient(resource.Resource):
dataentries = self.databuffer.get(suid, []) dataentries = self.databuffer.get(suid, [])
if dataentries: if dataentries:
return dataentries.pop(0) return dataentries.pop(0)
reqlist = self.requests.get(suid, [])
request.notifyFinish().addErrback(self._responseFailed, suid, request) request.notifyFinish().addErrback(self._responseFailed, suid, request)
reqlist.append(request) if self.requests.has_key(suid):
self.requests[suid] = reqlist self.requests[suid].finish() # Clear any stale request.
self.requests[suid] = request
return server.NOT_DONE_YET return server.NOT_DONE_YET
def mode_close(self, request): def mode_close(self, request):