跳至主要內容
Python日志 - logging
import logging  # 引入logging模块
import os.path
import time
# 第一步,创建一个logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)  # Log等级总开关
# 第二步,创建一个handler,用于写入日志文件
rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
log_path = os.path.dirname(os.getcwd()) + '/Logs/'
log_name = log_path + rq + '.log'
logfile = log_name
fh = logging.FileHandler(logfile, mode='w')
fh.setLevel(logging.DEBUG)  # 输出到file的log等级的开关
# 第三步,定义handler的输出格式
formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
fh.setFormatter(formatter)
# 第四步,将logger添加到handler里面
logger.addHandler(fh)

Ek0wraith小于 1 分钟笔记APIPython日志
Python并发编程

多进程程序例子

import argparse
import redis
from tqdm import tqdm
from multiprocessing import Pool, Process

parser = argparse.ArgumentParser(description='PyTorch MM Training')
parser.add_argument('--port', default=6379, type=str, help="port id")
parser.add_argument('--file', default=None, type=str, help="paths for train instances")
args = parser.parse_args()

host = '127.0.0.1'
port = args.port

# r = redis.Redis(host=host, port=port)

train_file = args.file

def worker_i(train_file, i, nums=16):
    r = redis.Redis(host=host, port=port)
    k = 0

    if i == 0:
        iter_ = tqdm(open(train_file, 'r'))
    else:
        iter_ = open(train_file, 'r')

    for info in iter_:
        if k % nums == i: # 将多个任务分成nums份
            r.set(k, info.strip())
        k += 1
process_list = []

nums = 8
for i in range(nums):
    p = Process(target=worker_i, args=(train_file, i, nums))
    p.start()
    process_list.append(p)

for i in process_list:
    p.join()

print('写入完成')

Ek0wraith大约 7 分钟笔记APIPython并发
Python二分查找 - bisect

二分查找模块 bisect

bisect_left(a, x, lo=0, hi=len(a))

相当于 left_bound,返回目标值的左侧边界,其返回值的解读:

  • 解读 1:将 x 插入有序数组 a 中的最左侧索引
  • 解读 2:a 中小于 x 的值的数量
  • 解读 3:有序数组 a 中大于等于 x 的最小元素索引

bisect_right(a, x, lo=0, hi=len(a))

bisect(a, x, lo=0, hi=len(a))


Ek0wraith大约 2 分钟笔记APIPython二分查找
Python常用数据结构

列表 list

列表方法

  • list.append(obj)
  • list.count(obj)
  • list.extend(seq)
  • list.index(obj)
  • list.insert(index, obj)
  • list.pop([index=-1])
  • list.remove(obj)
  • list.reverse()
  • list.sort(cmp=None, key=None, reverse=False)

Ek0wraith大约 4 分钟笔记APIPython数据结构
Python字符数字之间的转换函数
函数 说明
int(x [,base ]) 将 x 转换为一个整数
long(x [,base ]) 将 x 转换为一个长整数
float(x ) 将 x 转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象  x  转换为字符串
repr(x ) 将对象  x  转换为表达式字符串
eval(str ) 用来计算在字符串中的有效 Python 表达式,并返回一个对象
tuple(s ) 将序列  s  转换为一个元组
list(s ) 将序列  s  转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为 Unicode 字符
bin(x) 将数字转换为二进制字符串

Ek0wraith小于 1 分钟笔记APIPython