HiveNetCore.utils.run_tool module

运行参数处理通用工具

class HiveNetCore.utils.run_tool.AsyncTools[源代码]

基类:object

异步调用的工具类

async classmethod async_for_iter(async_iter_obj, func, *args, **kwargs)[源代码]

处理异步迭代器的异步函数

参数
  • AsyncGenerator (AsyncGenerator|Iterator) – 要处理的迭代器对象

  • func (function) –

    处理函数对象

    注: 处理函数的第一个入参是每次迭代的返回对象

  • 处理函数的其他固定位置入参 (-) –

  • 处理函数的kv入参 (-) –

async classmethod async_run_coroutine(coroutine_obj) Any[源代码]

异步方式执行协程返回结果

参数

coroutine_obj (coroutine) – 协程函数

返回

处理结果

返回类型

Any

classmethod nest_asyncio_apply(loop=None)[源代码]

开启允许异步调用嵌套执行

(解决This event loop is already running的异常)

参数

loop (AbstractEventLoop) – default=None, 异步事件对象

classmethod set_thread_event_loop()[源代码]

设置线程的协程参数, 让线程正常运行协程

返回

返回协程循环事件对象

返回类型

io_loop

classmethod sync_call(func, *args, **kwargs) Any[源代码]

同步方式执行函数

参数
  • func (function) – 要执行的函数对象

  • 执行函数的固定入参 (-) –

  • 执行函数的kv入参 (-) –

返回

函数返回值

返回类型

Any

classmethod sync_for_async_iter(async_iter_obj)[源代码]

将异步迭代器转为同步迭代器

参数

AsyncGenerator (AsyncGenerator|Iterator) – 要处理的迭代器对象

classmethod sync_run_coroutine(coroutine_obj) Any[源代码]

同步方式运行协程函数返回对象

(相当于await)

参数

coroutine_obj (coroutine) – 协程函数

返回

处理结果

返回类型

Any

class HiveNetCore.utils.run_tool.RunTool[源代码]

基类:object

运行参数处理通用类

提供各类运行环境处理相关的常用工具函数( 静态方法)

classmethod async_raise(tid, exctype)[源代码]

raises the exception, performs cleanup if needed

static del_all_global_var()[源代码]

清空所有全局变量

static del_global_var(key)[源代码]

删除key值对应的全局变量

参数

key (string) – 要删除的全局变量key值

classmethod exec_sys_cmd(cmd: str, shell_encoding: Optional[str] = None, stop_var: Optional[list] = None, use_stop_signal: Optional[int] = None)[源代码]

执行系统命令

参数
  • cmd (str) – 要执行的命令

  • shell_encoding (str) –

    default=None, 传入指定的编码

    注: 如果不传入, 尝试获取全局变量 SHELL_ENCODING, 如果也找不到, 则默认为’utf-8’

  • stop_var (list) – default=None, 用于在运行过程中在外部设置停止标志的列表变量, 第一个值为True时停止线程

  • use_stop_signal (int) – default=None, 使用指定signal进行中止, 例如 signal.CTRL_C_EVENT

返回

返回命令执行结果数组, 第一个为 exit_code, 0代表成功; 第二个为输出信息行数组

返回类型

(int, list)

classmethod exec_sys_cmd_not_output(cmd: str, shell_encoding: Optional[str] = None, stop_var: Optional[list] = None, use_stop_signal: Optional[int] = None)[源代码]

执行系统命令不输出信息

参数
  • cmd (str) – 要执行的命令

  • shell_encoding (str) –

    default=None, 传入指定的编码

    注: 如果不传入, 尝试获取全局变量 SHELL_ENCODING, 如果也找不到, 则默认为’utf-8’

  • stop_var (list) – default=None, 用于在运行过程中在外部设置停止标志的列表变量, 第一个值为True时停止线程

  • use_stop_signal (int) – default=None, 使用指定signal进行中止, 例如 signal.CTRL_C_EVENT

返回

返回命令执行结果数组, 第一个为 exit_code, 0代表成功; 第二个为输出信息行数组

返回类型

(int, list)

static get_current_function_name(frame_obj=None, is_with_class=True, is_with_module=False)[源代码]

@param {frameobject} frame_obj=None - 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数

参数

is_with_module (bool) –

default=False, 返回函数名是否含模块名

注意: 如果该参数为True, 则忽略is_with_class参数

static get_current_function_object(frame_obj=None)[源代码]

获取当前运行函数的函数对象

参数

frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数

static get_current_function_parameter_defines(frame_obj=None)[源代码]

获取当前运行函数的函数调用参数定义信息

参数

frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数

static get_current_function_parameter_values(frame_obj=None, fun_obj=None, is_simple_mode=False, ignore_first: bool = False)[源代码]

获取当前运行函数的函数调用参数取值信息

参数
  • frame_obj (frameobject) – default=None, 不传入frame,获取调用本函数的函数;传入则获取frame对应的函数

  • fun_obj (function) – default=None, 函数对象, 如不传入则通过frame获取, 传入可兼容静态函数的情况

  • is_simple_mode (bool) – default=False, 是否简单模式

  • ignore_first (bool) – default=False, 是否忽略第一个参数( 遇到是对象实例成员函数的情况可设置为True)

static get_function_name(fun_object, is_with_class=True, is_with_module=False)[源代码]

获取函数对象的定义名

参数
  • fun_object (function) – 函数对象

  • is_with_class (bool) – default=True, 返回函数名是否含类名

  • is_with_module (bool) –

    default=False, 返回函数名是否含模块名

    注意: 如果该参数为True, 则忽略is_with_class参数

static get_function_parameter_defines(fun_object)[源代码]

获取函数调用参数定义信息

参数

fun_object (function) – 函数对象

static get_global_logger()[源代码]

获取全局使用的logger对象

返回

全局使用的logger对象

返回类型

object

static get_global_var(key, default=None)[源代码]

根据key获取全局变量的值, 如果找不到key则返回None

参数
  • key (string) – 要获取的全局变量key值

  • default (object) – default=None, 获取不到返回的默认值

返回

全局变量的值, 如果找不到key则返回None

返回类型

object

static get_kv_opts()[源代码]

获取Key=Value格式的命令行输入参数

返回

命令行参数字典: key为参数名, value为参数值

返回类型

dict

示例

命令行# python ggeneric.py key1=value1 key2=value2 key3=”value 3” “key 4”=value4 “key 5”=”value 5”

input_para = RunTools.get_kv_opts()

static get_method_class_obj(method_object)[源代码]

获取类方法对象的所在类实例对象

参数

method_object (method) – 类方法对象

static get_object_attr_list(obj)[源代码]

获取对象的属性清单

参数

obj (object) – 要获取信息的对象

返回

返回的属性清单数组( 属性名列表)

返回类型

list

static get_object_class(obj)[源代码]

获取对象的类

参数

obj (object) – 要获取信息的对象

返回

返回的对象的类, 可以直接创建新对象, 例如:

_class = get_object_class(obj)

_newobj = _class(para=’’)

返回类型

class

static get_object_class_name(obj)[源代码]

获取对象的类名

参数

obj (object) – 要获取信息的对象

返回

返回类名

返回类型

string

static get_object_module_name(obj)[源代码]

获取对象的模块名

参数

obj (object) – 要获取信息的对象

返回

返回模块名

返回类型

string

static get_parent_function_frame(call_fun_level)[源代码]

获取指定层级的调用函数框架( fake_frame) , 从当前调用函数开始往逐级向上获取

参数

call_fun_level (int) –

要获取的函数名所属层级:

-1 - 返回函数自身框架

0 - 返回调用本函数的函数框架

1 - 返回调用本函数的函数的上1级函数框架

n - 返回调用本函数的函数的上n级函数框架

返回

返回指定层级函数的框架( fake_frame) , 可以通过fake_frame.f_code获取代码相关信息

返回类型

fake_frame

classmethod get_sys_environ(key: str, default: Optional[str] = None) str[源代码]

获取系统环境变量的值

参数
  • key (str) – 要获取的环境变量

  • default (str) – default=None, 获取不到时返回的默认值

返回

环境变量值

返回类型

str

static is_function_has_var_parameter(fun_object, var_positional=True, var_keyword=True)[源代码]

检查函数是否有动态参数

参数
  • -函数对象 (fun_object) –

  • var_positional (bool) – default=True, 检查是否有类似*args的参数

  • var_keyword (bool) – default=True, 检查是否有类似类似**kwargs的参数

classmethod platform_info() dict[源代码]

获取平台信息

返回

平台信息字典

platform - 操作系统平台信息(sys.platform), win32, cygwin, linux, darwin

machine - 机器类型(platform.machine()), i386, x86, x86_64, AMD64, arm64

bits - 操作系统位数(platform.architecture()), 32bit, 64bit

system - 操作系统名(platform.system()), Linux, Windows, Darwin

release - 操作系统发行版本(platform.release()), 2.0.0, nt

node - 网络机器名(platform.node())

platform_alias - 操作系统版本信息(platform.platform()), Windows-7-6.1.7601-SP1, macOS-11.4-arm64-arm-64bit

返回类型

dict

static set_global_logger(logger)[源代码]

设置全局使用的logger对象

参数

logger (object) –

logger对象,传入对象需满足:

1、标准logging的logger对象

2、自定义的日志类对象, 但应实现info、warning、error等标准方法

static set_global_var(key, value)[源代码]

设置全局变量的值, 后续可以通过Key获取到指定的值, 如果如果key存在将覆盖

参数
  • key (string) – 要设置的全局变量key值

  • value (object) – 要设置的全局变量值

static single_process_del_lockfile(process_name='', base_path='')[源代码]

强制删除进程锁文件

进程锁处理的辅助函数, 强制删除进程锁文件

参数
  • process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名

  • base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录

static single_process_enter(process_name='', base_path='', is_try_del_lockfile=False)[源代码]

获取进程锁: 如果获取失败代表锁已被其他进程占有, 可选择结束进程以控制同一时间只有一个进程执行

参数
  • process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名

  • base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录

  • is_try_del_lockfile (bool) – default=False, 是否尝试先删除锁文件( 可以应对强制关闭进程未自动删除锁文件的情况)

返回

是否获取进程锁成功: True - 获取成功并占用锁;False - 获取失败, 应选择关闭进程

返回类型

bool

示例

get_process_lock = RunTool.single_process_enter(“CFuntion”,”c:/test/”)

if not get_process_lock:

print(“已有一个进程在执行状态, 结束本进程”)

exit(1)

try:

do something …

finally:

RunTool.single_process_exit(“CFuntion”,”c:/test/”)

static single_process_exit(process_name='', base_path='')[源代码]

结束进程锁控制:

1、结束单进程控制, 删除锁文件; 2、注意必须在程序执行完后一定要调用这个函数, 否则会导致一直锁住

参数
  • process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名

  • base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录

static single_process_get_lockfile(process_name='', base_path='')[源代码]

获取进程锁处理锁文件路径

进程锁处理的辅助函数, 获取指定进程的锁文件名( 含路径)

参数
  • process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名

  • base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录

返回

锁文件名( 含路径)

返回类型

string

static single_process_with(process_name='', base_path='', is_try_del_lockfile=False, logger=None, log_level=30, exit_code=1)[源代码]

单进程控制的with简单模式,封装with模式的调用方式来实现单进程控制

参数
  • process_name (string) – default=’’, 进程锁的进程名, 默认值为’’;如果为’’代表获取执行程序的模块名

  • base_path (string) – default=’’, 进程锁文件指定的路径, 默认值为’’;如果为’’代表获取执行程序的模块文件目录

  • is_try_del_lockfile (bool) – default=False, 是否尝试先删除锁文件( 可以应对强制关闭进程未自动删除锁文件的情况)

  • logger (object) –

    default=None, 日志对象, 如果为None代表不需要输出日志, 传入对象需满足:

    1、标准logging的logger对象

    2、自定义的日志类对象, 但应实现warning、error等的标准方法

  • log_level (int) – default=logging.WARNING, 需要输出的自定义日志级别

  • exit_code (int) – default=1, 控制获取进程锁失败退出的错误码定义

示例

with RunTools.single_process_with():

# 以下为需要执行的程序逻辑

classmethod sleep(seconds=0)[源代码]

休眠一段时间

注: 如果有安装gevent则会使用gevent.sleep替代time.sleep

参数

seconds (int) – default=0, 休眠时间, 单位为秒

classmethod stop_thread(thread)[源代码]
static var_defined(name_str)[源代码]

判断变量是否已定义

参数

name_str (string) – 变量名( 注意是名字字符串, 不是传入变量)

返回

是否已定义, True-已定义, False-未定义

返回类型

bool

class HiveNetCore.utils.run_tool.SafeEval[源代码]

基类:object

安全的Eval工具

classmethod eval(source: str, globals_dict: Optional[dict] = None, locals_dict: Optional[dict] = None, forbid_import: bool = True, forbid_function: bool = False, forbid_modules: Optional[list] = None)[源代码]

安全的eval执行方法

参数
  • source (str) – 要执行的pyhton脚本

  • globals_dict (dict) –

    default=None, 指定可以访问的全局变量, 如果不指定代表允许访问所有全局变量

    例: {} - 禁止访问所有全局变量; {‘abc’: abc} - 指定只允许访问abc全局变量

  • locals_dict (dict) –

    default=None, 指定可以访问的局部变量, 如果不指定代表允许访问所有局部变量

    例: {} - 禁止访问所有局部变量; {‘abc’: abc} - 指定只允许访问abc局部变量

  • forbid_import (bool) – default=True, 是否禁止动态import模块

  • forbid_function (bool) – default=False, 是否禁止函数调用

  • forbid_modules (list) – default=None, 指定需要禁止使用的模块清单(黑名单)

返回

返回执行结果

返回类型

Any

classmethod str_to_var(expression: str)[源代码]

字符串转换为python变量

注: 不支持公式计算

参数

expression (str) – python语法的字符串, 例如 ‘[1, 2, 3]’

返回

转换后的python变量值

返回类型

any

class HiveNetCore.utils.run_tool.WaitLockTool(lock, print_timeout: Optional[float] = None, label: str = '', print_acquire_ok: bool = False, print_release: bool = False, force_no_acquire: bool = False)[源代码]

基类:object

等待锁处理类

注: 便于输出锁长时间等待的问题, 跟踪死锁情况

__init__(lock, print_timeout: Optional[float] = None, label: str = '', print_acquire_ok: bool = False, print_release: bool = False, force_no_acquire: bool = False)[源代码]

初始化简单锁处理类

参数
  • lock (<type>) – 锁对象

  • print_timeout (float) –

    default=None, 等待超时打印时间, 单位为秒, 如果不设置代表不打印超时信息

    注: 该参数仅为等待超时打印使用, 实际上锁还是会一直等待下去, 不会跳出等待处理

  • label (str) – default=’’, 打印信息时附带的显示内容

  • print_acquire_ok (bool) – default=False, 是否打印锁获取成功信息

  • print_release (bool) – default=False, 是否打印锁释放信息

  • force_no_acquire (bool) – default=Fasle, 是否强制不等待锁