分布式爬虫的任务端（将任务加入Queue）

    注意：
        被包装的函数需要返回一个可迭代的对象

    :param cfg_uri: 读取任务的路径
    :param queue: Queue的名字
    :param logger: 日志记录工具

def producer(cfg_uri, queue, logger=None):
    """
    分布式爬虫的任务端（将任务加入Queue）

    注意：
        被包装的函数需要返回一个可迭代的对象

    :param cfg_uri: 读取任务的路径
    :param queue: Queue的名字
    :param logger: 日志记录工具
    """
    _info, _exception = _deal_logger(logger)
    cfg_uri = _deal_uri(cfg_uri)

    def decorator(function):
        @wraps(function)
        def wapper(*args, **kwargs):
            client = _conn(cfg_uri, queue, _info)
            for item in function(*args, **kwargs):
                try:
                    if not isinstance(item, dict):
                        item = {'data': item}
                    data = dumps(item, ensure_ascii=False)
                    client.send(queue, data, headers={'persistent': 'true'})
                    _info('Producer insert %s - %s' % (queue, item))
                except ProducerFatalError, e:
                    _exception(e)
                    break
                except Exception, e:
                    _exception(e)
            client.disconnect()
            _info('disconnected %s' % cfg_uri)
        return wapper
    return decorator