Use event-driven task distribution.

Use Green Threads via the eventlet module to execute the server
tasks. So far, the only task is the Gearman worker. This is another
step forward to being able to execute a Gearman client task.

Change-Id: I4824753d3a3a07ad8ccf521a957efd41150b0752
This commit is contained in:
David Shrewsbury 2012-11-05 13:33:20 -05:00
parent c204b3d4e6
commit fa2d870b09
2 changed files with 31 additions and 15 deletions

View File

@ -12,6 +12,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import eventlet
eventlet.monkey_patch()
import daemon import daemon
import daemon.pidfile import daemon.pidfile
import grp import grp
@ -24,24 +27,32 @@ from libra.worker.drivers.base import known_drivers
from libra.worker.drivers.haproxy.services_base import haproxy_services from libra.worker.drivers.haproxy.services_base import haproxy_services
class Server(object): class EventServer(object):
""" """
Encapsulates server activity so we can run it in either daemon or Encapsulates server activity so we can run it in either daemon or
non-daemon mode. non-daemon mode.
""" """
def __init__(self, logger, servers, reconnect_sleep): def __init__(self, logger):
self.logger = logger self.logger = logger
self.driver = None
self.servers = servers
self.reconnect_sleep = reconnect_sleep
def main(self): def main(self, tasks):
""" Main method of the server. """ """
config_manager(self.logger, Main method of the server.
self.driver,
self.servers, tasks
self.reconnect_sleep) A tuple with two items: a function name, and a tuple with
that function's arguments.
"""
thread_list = []
for task, args in tasks:
thread_list.append(eventlet.spawn(task, *args))
for thd in thread_list:
thd.wait()
self.logger.info("Shutting down") self.logger.info("Shutting down")
@ -98,11 +109,15 @@ def main():
driver = driver_class() driver = driver_class()
logger.info("Job server list: %s" % args.server) logger.info("Job server list: %s" % args.server)
server = Server(logger, args.server, args.reconnect_sleep) server = EventServer(logger)
server.driver = driver
# Tasks to execute in parallel
task_list = [
(config_manager, (logger, driver, args.server, args.reconnect_sleep))
]
if args.nodaemon: if args.nodaemon:
server.main() server.main(task_list)
else: else:
context = daemon.DaemonContext( context = daemon.DaemonContext(
working_directory='/etc/haproxy', working_directory='/etc/haproxy',
@ -124,6 +139,6 @@ def main():
return 1 return 1
with context: with context:
server.main() server.main(task_list)
return 0 return 0

View File

@ -1,3 +1,4 @@
eventlet
gearman gearman
python-daemon python-daemon
requests requests