human
Complete this python program:
def background(func):
assistant
#Here is the Python program you requested.

    """A function decorator to run a long-running function as a background thread.
    """
    def internal(*a, **kw):
        web.data()
        tmpctx = web._context[threading.currentThread()]
        web._context[threading.currentThread()] = utils.storage(web.ctx.copy())
        def newfunc():
            web._context[threading.currentThread()] = tmpctx
            func(*a, **kw)
            myctx = web._context[threading.currentThread()]
            for k in myctx.keys():
                if (k not in ['status', 'headers', 'output']):
                    try:
                        del myctx[k]
                    except KeyError:
                        pass
        t = threading.Thread(target=newfunc)
        background.threaddb[id(t)] = t
        t.start()
        web.ctx.headers = []
        return seeother(changequery(_t=id(t)))
    return internal