Skip to content

Instantly share code, notes, and snippets.

@icsaas
Forked from ninehills/backgroudmix.py
Created February 13, 2014 03:34
Show Gist options
  • Save icsaas/8969311 to your computer and use it in GitHub Desktop.
Save icsaas/8969311 to your computer and use it in GitHub Desktop.
from time import sleep
import tornado
from multiprocessing.pool import ThreadPool
_workers = ThreadPool(10)
class BackgroundMix(tornado.web.RequestHandler):
"""将block任务放入线程池中执行
EXAMPLE:
# blocking task like querying to MySQL
def blocking_task(n):
sleep(n)
return n
class Handler(RequestHandler, BackgroundMix):
@asynchronous
def get(self):
self.run_background(blocking_task, self.on_complete, (10,))
def on_complete(self, res):
self.write("Test {0}<br/>".format(res))
self.finish()
"""
def run_background(self, func, callback, args=(), kwds={}):
self.ioloop = tornado.ioloop.IOLoop.instance()
def _callback(result):
self.ioloop.add_callback(lambda: callback(result))
_workers.apply_async(func, args, kwds, _callback)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment