python#OSError: [WinError 6] 句柄无效。#多进程函数运行一半# TypeError: ‘int‘ object is not interable

非常有必要记录一下最近遇到的坑
而以下实际上是一个报错列表

1OSError: [WinError 6] 句柄无效。

首先是小澎湃鼎力相助帮我弄的多进程,然后还预告了一下可能要升级Python版本,然后果不其然,我是3.7.2然后运行多进程代码之后,报错return self._semlock.exit(*args) OSError: [WinError 6] 句柄无效。
然后搜索这个错误发现解决方案很少,因此按照小澎湃说的先升级一下python版本,升级到3.9.0。
具体是,3.7.2的exe点uninstall,之后去阿里镜像下载,官网就是转圈圈(http://npm.taobao.org/mirrors/python/3.9.1/),所以还是安装到C盘比较OK一点。

2多进程函数只运行一半

然后欢天喜地升级了Python之后,结果定义的主函数没有运行完。


path = "D:\\images\\"
dir_path = "D:\\images"
downloaded_images = []
process_pool = ProcessPoolExecutor(max_workers=multiprocessing.cpu_count())  # 使用进程池 同时处理cpu个数的任务
def get_feature_and_insert(image_file_name, index):  # 处理图片主函数
    conn = pymysql.connect(host='116.62.120.194', port=3306, user='root', password='FXzmCSzs666',
                           database='test')  # charset='utf8'
    cs = conn.cursor()  # 获取游标
    print('阶段1')
    media_id = image_file_name.split('.')[0]
    image_path = path + image_file_name
    file = open(image_path, 'rb')
    image_file = Image.open(file)
    image = np.asarray(image_file)
    Colorfulness = image_colorfulness(image)  # 图片色彩丰富度
    width, height, WH = image_size(image)
    print('阶段2')
    avg_h, WarmHue, avg_s, std_s, avg_v, std_v, Clarity = image_colorfeatures(image)
    Num_contours, RT_score, Dia_score, VBI_score, VBC_score, Size_difference_score1,Size_difference_score3, Color_difference_score, Texture_difference_score = image_features(image)
    print('阶段3')
    sql = 'insert into tt(r,mediaId,photourl,avg_h,WarmHue,avg_s,std_s,avg_v,std_v,' \
          'Clarity,Colorfulness,RT_score,Dia_score,VBI_score,Size_score1,' \
          'Size_score3,Color_score,Texture_score,width,height,WH) values(%s,%s,%s,' \
          '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);'
    get_url_sql = f'select photourl from image_en where mediaId = {media_id}'  # 本地没有保存Url,从数据库中查询
    cs.execute(get_url_sql)
    image_url = cs.fetchone()[0]
    print(f'mediaId = {media_id} url = {image_url}')
    cs.execute(sql, (index, media_id, image_url, avg_h, WarmHue, avg_s, std_s, avg_v, std_v,
                     Clarity, Colorfulness, RT_score, Dia_score, VBI_score, Size_difference_score1,
                     Size_difference_score3, Color_difference_score, Texture_difference_score, width, height, WH))
    conn.commit()  # 提交
    cs.close()
    conn.close()
    print('入数据')

if __name__ == '__main__':
    start_time = time.time()  # time1
    print('开始处理')
    if not os.path.exists(dir_path):
        print("未找到图片,请检查图片路径")
    else:
        downloaded_images = os.listdir(dir_path)
    i = 0
    all_num = 3
    for image_name in downloaded_images:
        i += 1
        # get_feature_and_insert(image_name, i)  # 使用单进程
        process_pool.submit(get_feature_and_insert, image_name, i)  # 使用多进程
        if i == all_num:  # 先跑10个看看速度
            break

    process_pool.shutdown(wait=True)
    print('处理完毕')

就是运行,发现这个get_featurea_and_insert这个函数中的输出的结果是阶段1.阶段2可以输出,然后阶段3及以后的内容根本没有执行,去数据库中也找不到插入的数据,真自抱自泣。然后以为是没有升级到最近的Python所以又卸载3.9.0然后安装了3.9.1然后还是一样的,就是后面怎么都不执行。所以是不是多进程那个函数的长度有限制呢?还是我的老古董电脑太破了呢红红蓝蓝紫紫都摇头‍

然后之前看视频有提到pool.map的用法,所以反正都是执行不了,不如一试,更新的代码如下
python#OSError: [WinError 6] 句柄无效。#多进程函数运行一半# TypeError: ‘int‘ object is not interable_第1张图片

在此过程中,出现报错
return _pool.map(star(f), zip(*args)) # chunksize TypeError: ‘int’ object is not interable

3TypeError: ‘int’ object is not interable

按照教程 python多进程中多参数问题
https://blog.csdn.net/weixin_37913042/article/details/100559873
必须要输入的参数是列表,可迭代的,因此修改代码如下


if __name__ == '__main__':
    start_time = time.time()  # time1
    print('开始处理')
    if not os.path.exists(dir_path):
        print("未找到图片,请检查图片路径")
    else:
        downloaded_images = os.listdir(dir_path)

    index_list=[]
    all_num=3
    for i in range(1,all_num+1):
        index_list.append(i)
    pool=Pool(4)
    pool.map(get_feature_and_insert,downloaded_images,index_list)  #新写的多进程部分

    print('处理完毕')

然后继续报错
AttributeError: module ‘cv2.cv2’ has no attribute ‘saliency’[SOLVED]

4AttributeError: module ‘cv2.cv2’ has no attribute ‘saliency’[SOLVED]

参考博文
https://blog.csdn.net/hopena/article/details/91350271

原来是我的包没有下全,所以在ternimal中下载此包
D:\PycharmWorkSpace\pic_feature>pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv_contrib_python

然后就能正常执行了我天!!!欢呼撒花★,°:.☆( ̄▽ ̄)/$:.°★
然后用最开始的小澎湃多进程的程序跑也能跑出来了,数据库写入正常,所以刚开始只是缺少了一个包,但程序没有报出这个错误真的太隐蔽了也。。。

最后再次感谢小澎湃的帮忙,鞠躬~~~~~~

你可能感兴趣的:(Py小Bug,python,mysql,多进程)