parameter.py 1.5 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020-02-12 13:17
# @Author  : Lemon
# @File    : check_args.py
# @Software: PyCharm
import json
from inspect import signature


def _is_json(data):
    try:
        res = json.loads(data)
        if isinstance(res, int):
            raise BaseException("非json格式")
        return res
    except:
        return data


def join(func, payload):
    '''
    func 调用的函数
    payload 传递的参数  # str or jsonstr
    :return 组装好的提交参数
    '''
    sig = signature(func)
    keys = sig.parameters.keys()
    if tuple(keys):
        data = _is_json(payload)
        if isinstance(data, str):
            payload = {tuple(keys)[0]: data}
        else:
            for k in data.copy().keys():
                if k not in keys:
                    data.pop(k)
            payload = data
    else:
        payload = {}

    payload['fn'] = func
    return payload


class Do():
    def one(self, x):
        print(locals())

    def two(self, x, y):
        print(locals())

    def three(self, x, y, z):
        print(locals())

    def createGroup(self,message,user_ids):
        print(locals())


if __name__ == '__main__':
    d = Do()
    from concurrent.futures import ThreadPoolExecutor

    t = ThreadPoolExecutor(2)

    f1 = join(d.two, {"x": 'x1', "y": 'y2', 'z': 'z3'})
    f2 = join(d.one, 'x2')

    f3 = join(d.createGroup,{"message":"12333","user_ids":[1,2,3,4,5]})

    t.submit(**f1)
    t.submit(**f2)
    t.submit(**f3)