python - Python多处理图像压缩-100%时只有一个CPU

标签 python opencv python-multiprocessing rospy

我有一个Python脚本,它将:

  • 遍历给定目录中的rosbags
  • 每条非图像消息都直接复制到新包装袋中,每条图像消息将被压缩并添加到新包装袋中

  • 我决定制作此脚本的新版本以加快处理速度。我的新脚本可以:
  • 遍历给定目录中的rosbags
  • 每个非图片消息都直接复制到新袋子
  • 每个图像消息都添加到队列
  • 处理完包装袋中的所有消息后,我创建了从队列读取,压缩图像并将其添加到完成列表的过程。
  • 循环浏览完成的列表,将压缩的图像添加到新包中

  • 我创建的代码存在一些问题。
  • 似乎只有一个CPU处于100%使用率。
  • 当它移动到下一个rosbag时,ram使用率仍然很高。似乎没有删除某些内容。

  • 我认为解决这个问题不需要ROS知识。我是否正确使用多处理库?
    import glob
    import os
    import argparse
    from datetime import datetime
    import numpy as np
    import cv2
    import sys
    import copy
    
    import rosbag
    import rospy
    from sensor_msgs.msg import CompressedImage
    from cv_bridge import CvBridge
    from multiprocessing import Process, Manager, Queue, cpu_count, queues
    
    # Image constants
    IMG_W = 1280
    IMG_H = 1024
    NUM_CHANNEL = 3
    
    bridge = CvBridge()
    
    parser = argparse.ArgumentParser(
        description='Creates a bag containing the image data')
    
    parser.add_argument(
        'input_dirs',
        nargs='+',
        help='Input and Output directory for bag files.')
    
    args = parser.parse_args()
    
    queue = Queue()
    manager = Manager()
    converted_imgs = manager.list()
    
    bag_path=''
    out_path=''
    
    if len(args.input_dirs) == 2:
        bag_path = args.input_dirs[0]
        out_path = args.input_dirs[1]
        os.chdir(bag_path)
    else:
        print('Please enter the input and output bag path.')
        exit()
    
    bag_names = []
    # Add all bags in bag_path to bag_names
    for file in sorted(os.listdir(bag_path)):
        if file.endswith(".bag"):
            bag_names.append(file)
    
    camera_image_topics = {
        '/cam_a/image_raw': '/cam_a/compressed',
        '/cam_b/image_raw': '/cam_b/compressed',
        '/cam_c/image_raw': '/cam_c/compressed'
    }
    
    # Display progress function
    # Prints out the current progress on the same line
    def display_progress(progress):
        sys.stdout.write("\r" + 'PROGRESS ' + format(progress, '.2f') + '%')
        sys.stdout.flush()
    
    # Convert each Image to CompressedImage
    def create_msg(img_total):
        global queue
        global converted_imgs
    
        while not queue.empty():
            topic, raw_data, t = queue.get()
    
            # Display progress
            progress = ((img_total - queue.qsize()) * 100.00) / img_total
            display_progress(progress)
    
            # Create CompressedImage msg and compress the image
            cmprs_msg = CompressedImage()
            cmprs_msg.format = "png"
            cmprs_msg.data = np.array(cv2.imencode('.png', raw_data, [int(cv2.IMWRITE_PNG_COMPRESSION), 3])[1]).tostring()
            cmprs_msg.header.stamp = t
    
            # Add message to be written to the outbag
            converted_imgs.append((topic, cmprs_msg))
        return
    
    for i in range(len(bag_names)):
        print('Reading bag ' + bag_names[i])
    
        with rosbag.Bag(out_path + 'compressed_' + bag_names[i], 'w') as outbag:
            count = 0.0  # Init as float
            msg_total = rosbag.Bag(bag_names[i]).get_message_count()
    
            print('Copying non image ros messages into outbag,')
            print('also adding image messages to the queue')
            # print('Copying msgs and compressing images into outbag.')
            for topic, msg, t in rosbag.Bag(bag_names[i]).read_messages():
                if topic not in camera_image_topics:
                    outbag.write(topic, msg, t)
                else:
                    # Convert image data to numpy matrix and add to queue
                    cv2_matrix = bridge.imgmsg_to_cv2(msg, msg.encoding)
                    raw_data = np.asarray(cv2_matrix).reshape((IMG_H, IMG_W, NUM_CHANNEL))
                    queue.put((camera_image_topics[topic], raw_data, t))
    
                # Increase count of finished messages
                count += 1
    
                # Display progress
                progress = (count/msg_total) * 100
                display_progress(progress)
            # Finished
            print(' [DONE]')
    
            img_total = queue.qsize()
    
            print('Compressing images within the queue')
            processes = []
            for cpu_num in xrange(cpu_count()):
                p = Process(target=create_msg, args=(img_total,))
                processes.append(p)
            for p in processes:
                p.start()
    
            # Finished
            for p in processes:
                p.join()
            print(' [DONE]')
    
            print('Adding images to the outbag')
            for topic, msg in converted_imgs:
                outbag.write(topic, msg, msg.header.stamp)
    

    更新1:按要求提供MVP。似乎使用了所有核心...
    from multiprocessing import Process, Manager, Queue, cpu_count, queues
    
    queue = Queue()
    manager = Manager()
    converted_imgs = manager.list()
    
    
    # Convert each Image to CompressedImage
    def create_msg(img_total):
        global queue
        global converted_imgs
    
        while not queue.empty():
            x = queue.get()
    
            # Add message to be written to the outbag
            converted_imgs.append(x ** 2)
        return
    
    print('Add to queue')
    for x in range(0, 100000):
        queue.put(10)
    
    img_total = queue.qsize()
    
    print('Calculate square of each queue member')
    processes = []
    for cpu_num in xrange(cpu_count()):
        p = Process(target=create_msg, args=(img_total,))
        processes.append(p)
    for p in processes:
        p.start()
    
    # Finished
    for p in processes:
        p.join()
    print(' [DONE]')
    
    print('Adding images to the outbag')
    for x in converted_imgs:
        print(x)
    

    更新2:我认为我编写的代码是正确的。正如罗斯在评论中所说,它很可能在队列中序列化。我添加了评论以确认他写了什么。似乎只使用了两个进程,然后下降到一个。我认为对象太大,无法使程序具有多个进程。
    Copying non image ros messages into outbag,
    also adding image messages to the queue
    PROGRESS 100.00% [DONE]
    Compressing images within the queue
    Process 0
    Process: 0 Queue size: 1472
    Process 1
    Process 2
    Process: 2 Queue size: 1471
    Process 3
    Process: 0 Queue size: 1470
    Process: 2 Queue size: 1469
    Process: 0 Queue size: 1468
    Process: 2 Queue size: 1467
    Process: 0 Queue size: 1466
    Process: 2 Queue size: 1465
    Process: 0 Queue size: 1464
    Process: 2 Queue size: 1463
    Process: 0 Queue size: 1462
    Process: 2 Queue size: 1461
    Process: 0 Queue size: 1460
    Process: 2 Queue size: 1459
    Process: 0 Queue size: 1458
    Process: 2 Queue size: 1457
    Process: 0 Queue size: 1456
    Process: 2 Queue size: 1455
    Process: 0 Queue size: 1454
    Process: 2 Queue size: 1453
    Process: 0 Queue size: 1452
    Process: 2 Queue size: 1451
    Process: 0 Queue size: 1450
    Process: 2 Queue size: 1449
    Process: 0 Queue size: 1448
    Process: 2 Queue size: 1447
    Process: 0 Queue size: 1446
    Process: 2 Queue size: 1445
    Process: 0 Queue size: 1444
    Process: 2 Queue size: 1443
    Process: 0 Queue size: 1442
    Process: 2 Queue size: 1441
    Process: 0 Queue size: 1440
    Process: 2 Queue size: 1439
    Process: 0 Queue size: 1438
    Process: 2 Queue size: 1437
    Process: 0 Queue size: 1436
    Process: 2 Queue size: 1435
    Process: 0 Queue size: 1434
    Process: 2 Queue size: 1433
    Process: 0 Queue size: 1432
    Process: 2 Queue size: 1431
    Process: 0 Queue size: 1430
    Process: 2 Queue size: 1429
    Process: 0 Queue size: 1428
    Process: 2 Queue size: 1427
    Process: 0 Queue size: 1426
    Process: 2 Queue size: 1425
    Process: 0 Queue size: 1424
    Process: 2 Queue size: 1423
    Process: 0 Queue size: 1422
    Process: 2 Queue size: 1421
    Process: 0 Queue size: 1420
    Process: 2 Queue size: 1419
    Process: 0 Queue size: 1418
    Process: 2 Queue size: 1417
    Process: 0 Queue size: 1416
    Process: 2 Queue size: 1415
    Process: 0 Queue size: 1414
    Process: 2 Queue size: 1413
    Process: 0 Queue size: 1412
    Process: 2 Queue size: 1411
    Process: 0 Queue size: 1410
    Process: 2 Queue size: 1409
    Process: 0 Queue size: 1408
    Process: 2 Queue size: 1407
    Process: 0 Queue size: 1406
    Process: 2 Queue size: 1405
    Process: 0 Queue size: 1404
    Process: 2 Queue size: 1403
    Process: 0 Queue size: 1402
    Process: 2 Queue size: 1401
    Process: 0 Queue size: 1400
    Process: 2 Queue size: 1399
    Process: 0 Queue size: 1398
    Process: 2 Queue size: 1397
    Process: 0 Queue size: 1396
    Process: 2 Queue size: 1395
    Process: 0 Queue size: 1394
    Process: 2 Queue size: 1393
    Process: 0 Queue size: 1392
    Process: 2 Queue size: 1391
    Process: 0 Queue size: 1390
    Process: 2 Queue size: 1389
    Process: 0 Queue size: 1388
    Process: 2 Queue size: 1387
    Process: 0 Queue size: 1386
    Process: 2 Queue size: 1385
    Process: 0 Queue size: 1384
    Process: 2 Queue size: 1383
    Process: 0 Queue size: 1382
    Process: 2 Queue size: 1381
    Process: 0 Queue size: 1380
    Process: 2 Queue size: 1379
    Process: 0 Queue size: 1378
    Process: 2 Queue size: 1377
    Process: 0 Queue size: 1376
    Process: 2 Queue size: 1375
    Process: 0 Queue size: 1374
    Process: 2 Queue size: 1373
    Process: 0 Queue size: 1372
    Process: 2 Queue size: 1371
    Process: 0 Queue size: 1370
    Process: 2 Queue size: 1369
    Process: 0 Queue size: 1368
    Process: 2 Queue size: 1367
    Process: 0 Queue size: 1366
    Process: 2 Queue size: 1365
    Process: 0 Queue size: 1364
    Process: 2 Queue size: 1363
    Process: 0 Queue size: 1362
    Process: 2 Queue size: 1361
    Process: 0 Queue size: 1360
    Process: 2 Queue size: 1359
    Process: 0 Queue size: 1358
    Process: 2 Queue size: 1357
    Process: 0 Queue size: 1356
    Process: 2 Queue size: 1355
    Process: 0 Queue size: 1354
    Process: 2 Queue size: 1353
    Process: 0 Queue size: 1352
    Process: 2 Queue size: 1351
    Process: 0 Queue size: 1350
    Process: 2 Queue size: 1349
    Process: 0 Queue size: 1348
    Process: 2 Queue size: 1347
    Process: 0 Queue size: 1346
    Process: 2 Queue size: 1345
    Process: 0 Queue size: 1344
    Process: 2 Queue size: 1343
    Process: 0 Queue size: 1342
    Process: 2 Queue size: 1341
    Process: 0 Queue size: 1340
    Process: 2 Queue size: 1339
    Process: 0 Queue size: 1338
    Process: 2 Queue size: 1337
    Process: 0 Queue size: 1336
    Process: 2 Queue size: 1335
    Process: 0 Queue size: 1334
    Process: 2 Queue size: 1333
    Process: 0 Queue size: 1332
    Process: 2 Queue size: 1331
    Process: 0 Queue size: 1330
    Process: 2 Queue size: 1329
    Process: 0 Queue size: 1328
    Process: 2 Queue size: 1327
    Process: 0 Queue size: 1326
    Process: 2 Queue size: 1325
    Process: 0 Queue size: 1324
    Process: 2 Queue size: 1323
    Process: 0 Queue size: 1322
    Process: 2 Queue size: 1321
    Process: 0 Queue size: 1320
    Process: 2 Queue size: 1319
    Process: 0 Queue size: 1318
    Process: 2 Queue size: 1317
    Process: 0 Queue size: 1316
    Process: 2 Queue size: 1315
    Process: 0 Queue size: 1314
    Process: 2 Queue size: 1313
    Process: 0 Queue size: 1312
    Process: 2 Queue size: 1311
    Process: 0 Queue size: 1310
    Process: 2 Queue size: 1309
    Process: 0 Queue size: 1308
    Process: 2 Queue size: 1307
    Process: 0 Queue size: 1306
    Process: 2 Queue size: 1305
    Process: 0 Queue size: 1304
    Process: 2 Queue size: 1303
    Process: 0 Queue size: 1302
    Process: 2 Queue size: 1301
    Process: 0 Queue size: 1300
    Process: 2 Queue size: 1299
    Process: 0 Queue size: 1298
    Process: 2 Queue size: 1297
    Process: 0 Queue size: 1296
    Process: 2 Queue size: 1295
    Process: 0 Queue size: 1294
    Process: 2 Queue size: 1293
    Process: 0 Queue size: 1292
    Process: 2 Queue size: 1291
    Process: 0 Queue size: 1290
    Process: 2 Queue size: 1289
    Process: 0 Queue size: 1288
    Process: 2 Queue size: 1287
    Process: 0 Queue size: 1286
    Process: 2 Queue size: 1285
    Process: 0 Queue size: 1284
    Process: 2 Queue size: 1283
    Process: 0 Queue size: 1282
    Process: 2 Queue size: 1281
    Process: 0 Queue size: 1280
    Process: 2 Queue size: 1279
    Process: 0 Queue size: 1278
    Process: 2 Queue size: 1277
    Process: 0 Queue size: 1276
    Process: 2 Queue size: 1275
    Process: 0 Queue size: 1274
    Process: 2 Queue size: 1273
    Process: 0 Queue size: 1272
    Process: 2 Queue size: 1271
    Process: 0 Queue size: 1270
    Process: 2 Queue size: 1269
    Process: 0 Queue size: 1268
    Process: 2 Queue size: 1267
    Process: 0 Queue size: 1266
    Process: 2 Queue size: 1265
    Process: 0 Queue size: 1264
    Process: 2 Queue size: 1263
    Process: 0 Queue size: 1262
    Process: 2 Queue size: 1261
    Process: 0 Queue size: 1260
    Process: 2 Queue size: 1259
    Process: 0 Queue size: 1258
    Process: 2 Queue size: 1257
    Process: 0 Queue size: 1256
    Process: 2 Queue size: 1255
    Process: 0 Queue size: 1254
    Process: 2 Queue size: 1253
    Process: 0 Queue size: 1252
    Process: 2 Queue size: 1251
    Process: 0 Queue size: 1250
    Process: 2 Queue size: 1249
    Process: 0 Queue size: 1248
    Process: 2 Queue size: 1247
    Process: 0 Queue size: 1246
    Process: 2 Queue size: 1245
    Process: 0 Queue size: 1244
    Process: 2 Queue size: 1243
    Process: 0 Queue size: 1242
    Process: 2 Queue size: 1241
    Process: 0 Queue size: 1240
    Process: 2 Queue size: 1239
    Process: 0 Queue size: 1238
    Process: 2 Queue size: 1237
    Process: 0 Queue size: 1236
    Process: 2 Queue size: 1235
    Process: 0 Queue size: 1234
    Process: 2 Queue size: 1233
    Process: 0 Queue size: 1232
    Process: 2 Queue size: 1231
    Process: 0 Queue size: 1230
    Process: 2 Queue size: 1229
    Process: 0 Queue size: 1228
    Process: 2 Queue size: 1227
    Process: 0 Queue size: 1226
    Process: 2 Queue size: 1225
    Process: 0 Queue size: 1224
    Process: 2 Queue size: 1223
    Process: 0 Queue size: 1222
    Process: 2 Queue size: 1221
    Process: 0 Queue size: 1220
    Process: 2 Queue size: 1219
    Process: 0 Queue size: 1218
    Process: 2 Queue size: 1217
    Process: 0 Queue size: 1216
    Process: 2 Queue size: 1215
    Process: 0 Queue size: 1214
    Process: 2 Queue size: 1213
    Process: 0 Queue size: 1212
    Process: 2 Queue size: 1211
    Process: 0 Queue size: 1210
    Process: 2 Queue size: 1209
    Process: 0 Queue size: 1208
    Process: 2 Queue size: 1207
    Process: 0 Queue size: 1206
    Process: 2 Queue size: 1205
    Process: 0 Queue size: 1204
    Process: 2 Queue size: 1203
    Process: 0 Queue size: 1202
    Process: 2 Queue size: 1201
    Process: 0 Queue size: 1200
    Process: 2 Queue size: 1199
    Process: 0 Queue size: 1198
    Process: 2 Queue size: 1197
    Process: 0 Queue size: 1196
    Process: 2 Queue size: 1195
    Process: 0 Queue size: 1194
    Process: 2 Queue size: 1193
    Process: 0 Queue size: 1192
    Process: 2 Queue size: 1191
    Process: 0 Queue size: 1190
    Process: 2 Queue size: 1189
    Process: 0 Queue size: 1188
    Process: 2 Queue size: 1187
    Process: 0 Queue size: 1186
    Process: 2 Queue size: 1185
    Process: 0 Queue size: 1184
    Process: 2 Queue size: 1183
    Process: 0 Queue size: 1182
    Process: 2 Queue size: 1181
    Process: 0 Queue size: 1180
    Process: 2 Queue size: 1179
    Process: 0 Queue size: 1178
    Process: 2 Queue size: 1177
    Process: 0 Queue size: 1176
    Process: 2 Queue size: 1175
    Process: 0 Queue size: 1174
    Process: 2 Queue size: 1173
    Process: 0 Queue size: 1172
    Process: 2 Queue size: 1171
    Process: 0 Queue size: 1170
    Process: 2 Queue size: 1169
    Process: 0 Queue size: 1168
    Process: 2 Queue size: 1167
    Process: 0 Queue size: 1166
    Process: 2 Queue size: 1165
    Process: 0 Queue size: 1164
    Process: 2 Queue size: 1163
    Process: 0 Queue size: 1162
    Process: 2 Queue size: 1161
    Process: 0 Queue size: 1160
    Process: 2 Queue size: 1159
    Process: 0 Queue size: 1158
    Process: 2 Queue size: 1157
    Process: 0 Queue size: 1156
    Process: 2 Queue size: 1155
    Process: 0 Queue size: 1154
    Process: 2 Queue size: 1153
    Process: 0 Queue size: 1152
    Process: 2 Queue size: 1151
    Process: 0 Queue size: 1150
    Process: 2 Queue size: 1149
    Process: 0 Queue size: 1148
    Process: 2 Queue size: 1147
    Process: 0 Queue size: 1146
    Process: 2 Queue size: 1145
    Process: 0 Queue size: 1144
    Process: 2 Queue size: 1143
    Process: 0 Queue size: 1142
    Process: 2 Queue size: 1141
    Process: 0 Queue size: 1140
    Process: 2 Queue size: 1139
    Process: 0 Queue size: 1138
    Process: 2 Queue size: 1137
    Process: 0 Queue size: 1136
    Process: 2 Queue size: 1135
    Process: 0 Queue size: 1134
    Process: 2 Queue size: 1133
    Process: 0 Queue size: 1132
    Process: 2 Queue size: 1131
    Process: 0 Queue size: 1130
    Process: 2 Queue size: 1129
    Process: 0 Queue size: 1128
    Process: 2 Queue size: 1127
    Process: 0 Queue size: 1126
    Process: 2 Queue size: 1125
    Process: 0 Queue size: 1124
    Process: 2 Queue size: 1123
    Process: 0 Queue size: 1122
    Process: 2 Queue size: 1121
    Process: 0 Queue size: 1120
    Process: 2 Queue size: 1119
    Process: 0 Queue size: 1118
    Process: 2 Queue size: 1117
    Process: 0 Queue size: 1116
    Process: 2 Queue size: 1115
    Process: 0 Queue size: 1114
    Process: 2 Queue size: 1113
    Process: 0 Queue size: 1112
    Process: 2 Queue size: 1111
    Process: 0 Queue size: 1110
    Process: 2 Queue size: 1109
    Process: 0 Queue size: 1108
    Process: 2 Queue size: 1107
    Process: 0 Queue size: 1106
    Process: 2 Queue size: 1105
    Process: 0 Queue size: 1104
    Process: 2 Queue size: 1103
    Process: 0 Queue size: 1102
    Process: 2 Queue size: 1101
    Process: 0 Queue size: 1100
    Process: 2 Queue size: 1099
    Process: 0 Queue size: 1098
    Process: 2 Queue size: 1097
    Process: 0 Queue size: 1096
    Process: 2 Queue size: 1095
    Process: 0 Queue size: 1094
    Process: 2 Queue size: 1093
    Process: 0 Queue size: 1092
    Process: 2 Queue size: 1091
    Process: 0 Queue size: 1090
    Process: 2 Queue size: 1089
    Process: 0 Queue size: 1088
    Process: 2 Queue size: 1087
    Process: 0 Queue size: 1086
    Process: 2 Queue size: 1085
    Process: 0 Queue size: 1084
    Process: 2 Queue size: 1083
    Process: 0 Queue size: 1082
    Process: 2 Queue size: 1081
    Process: 0 Queue size: 1080
    Process: 2 Queue size: 1079
    Process: 0 Queue size: 1078
    Process: 2 Queue size: 1077
    Process: 0 Queue size: 1076
    Process: 2 Queue size: 1075
    Process: 0 Queue size: 1074
    Process: 2 Queue size: 1073
    Process: 0 Queue size: 1072
    Process: 2 Queue size: 1071
    Process: 0 Queue size: 1070
    Process: 2 Queue size: 1069
    Process: 0 Queue size: 1068
    Process: 2 Queue size: 1067
    Process: 0 Queue size: 1066
    Process: 2 Queue size: 1065
    Process: 0 Queue size: 1064
    Process: 2 Queue size: 1063
    Process: 0 Queue size: 1062
    Process: 2 Queue size: 1061
    Process: 0 Queue size: 1060
    Process: 2 Queue size: 1059
    Process: 0 Queue size: 1058
    Process: 2 Queue size: 1057
    Process: 0 Queue size: 1056
    Process: 2 Queue size: 1055
    Process: 0 Queue size: 1054
    Process: 2 Queue size: 1053
    Process: 0 Queue size: 1052
    Process: 2 Queue size: 1051
    Process: 2 Queue size: 1050
    Process: 2 Queue size: 1049
    Process: 2 Queue size: 1048
    Process: 2 Queue size: 1047
    Process: 2 Queue size: 1046
    Process: 2 Queue size: 1045
    Process: 2 Queue size: 1044
    Process: 2 Queue size: 1043
    Process: 2 Queue size: 1042
    Process: 2 Queue size: 1041
    Process: 2 Queue size: 1040
    Process: 2 Queue size: 1039
    Process: 2 Queue size: 1038
    Process: 2 Queue size: 1037
    Process: 2 Queue size: 1036
    Process: 2 Queue size: 1035
    Process: 2 Queue size: 1034
    Process: 2 Queue size: 1033
    Process: 2 Queue size: 1032
    Process: 2 Queue size: 1031
    Process: 2 Queue size: 1030
    Process: 2 Queue size: 1029
    Process: 2 Queue size: 1028
    Process: 2 Queue size: 1027
    Process: 2 Queue size: 1026
    Process: 2 Queue size: 1025
    Process: 2 Queue size: 1024
    Process: 2 Queue size: 1023
    Process: 2 Queue size: 1022
    Process: 2 Queue size: 1021
    Process: 2 Queue size: 1020
    Process: 2 Queue size: 1019
    Process: 2 Queue size: 1018
    Process: 2 Queue size: 1017
    Process: 2 Queue size: 1016
    Process: 2 Queue size: 1015
    Process: 2 Queue size: 1014
    Process: 2 Queue size: 1013
    Process: 2 Queue size: 1012
    Process: 2 Queue size: 1011
    Process: 2 Queue size: 1010
    Process: 2 Queue size: 1009
    Process: 2 Queue size: 1008
    Process: 2 Queue size: 1007
    Process: 2 Queue size: 1006
    Process: 2 Queue size: 1005
    Process: 2 Queue size: 1004
    Process: 2 Queue size: 1003
    Process: 2 Queue size: 1002
    Process: 2 Queue size: 1001
    Process: 2 Queue size: 1000
    Process: 2 Queue size: 999
    Process: 2 Queue size: 998
    Process: 2 Queue size: 997
    Process: 2 Queue size: 996
    Process: 2 Queue size: 995
    Process: 2 Queue size: 994
    Process: 2 Queue size: 993
    Process: 2 Queue size: 992
    Process: 2 Queue size: 991
    Process: 2 Queue size: 990
    Process: 2 Queue size: 989
    Process: 2 Queue size: 988
    Process: 2 Queue size: 987
    Process: 2 Queue size: 986
    Process: 2 Queue size: 985
    Process: 2 Queue size: 984
    Process: 2 Queue size: 983
    Process: 2 Queue size: 982
    Process: 2 Queue size: 981
    Process: 2 Queue size: 980
    Process: 2 Queue size: 979
    Process: 2 Queue size: 978
    Process: 2 Queue size: 977
    Process: 2 Queue size: 976
    Process: 2 Queue size: 975
    Process: 2 Queue size: 974
    Process: 2 Queue size: 973
    Process: 2 Queue size: 972
    Process: 2 Queue size: 971
    Process: 2 Queue size: 970
    Process: 2 Queue size: 969
    Process: 2 Queue size: 968
    Process: 2 Queue size: 967
    Process: 2 Queue size: 966
    Process: 2 Queue size: 965
    Process: 2 Queue size: 964
    Process: 2 Queue size: 963
    Process: 2 Queue size: 962
    Process: 2 Queue size: 961
    Process: 2 Queue size: 960
    Process: 2 Queue size: 959
    Process: 2 Queue size: 958
    Process: 2 Queue size: 957
    Process: 2 Queue size: 956
    Process: 2 Queue size: 955
    Process: 2 Queue size: 954
    Process: 2 Queue size: 953
    ...
    Process: 2 Queue size: 16
    Process: 2 Queue size: 15
    Process: 2 Queue size: 14
    Process: 2 Queue size: 13
    Process: 2 Queue size: 12
    Process: 2 Queue size: 11
    Process: 2 Queue size: 10
    Process: 2 Queue size: 9
    Process: 2 Queue size: 8
    Process: 2 Queue size: 7
    Process: 2 Queue size: 6
    Process: 2 Queue size: 5
    Process: 2 Queue size: 4
    Process: 2 Queue size: 3
    Process: 2 Queue size: 2
    Process: 2 Queue size: 1
    Process: 2 Queue size: 0
     [DONE]
    

    最佳答案

    我对全局,队列和进程之间的交互方式并不特别熟悉,但是看起来这可能是您的瓶颈。尝试让您的进程通过管道将值返回到主线程!

    # Convert each Image to CompressedImage  
    def create_msg(img_total, pipe):
    # You won't need these:
    # global queue
    # global converted_imgs
    
        while not YOUR_COUNTER():
            x = queue.get()
            # Add message to be written to the outbag
            pipe.send(x ** 2)
        return
    
    # create a list to keep all processes
    processes = []
    # create a list to keep connections
    parent_connections = []
    for j in range(cpu_count()):
        # create a pipe for communication
        parent_conn, child_conn = Pipe()
        parent_connections.append(parent_conn)
        process_args = (YOUR_ARGS, child_conn)
        # create the process, pass instance and connection
        process = Process(target=create_msg, args=(process_args,))
        processes.append(process)
        # start all processes
    for process in processes:
        process.start()
    
    # make sure that all processes have finished
    for process in processes:
        process.join()
    for parent_connection in parent_connections:
        while parent_connection.poll():
            recv = parent_connection.recv()
            # Redefine this list somewhere else to use
            converted_imgs.append(recv)
    

    关于python - Python多处理图像压缩-100%时只有一个CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49683473/

    相关文章:

    python - DjangoCMS : how to auto-add default plugins in placeholders

    python - ewmvar 在 pandas 中的向后兼容性

    python - 在直方图中找到两个最高峰的中心值Python

    python - Ubuntu从14.10更新到16.04后,为什么python找不到libavcodec.so.54?

    python - 我的 python 多处理代码比串行代码慢

    python - 多处理池 : How to call an arbitrary list of methods on a list of class objects

    python - 使用python Mechanize访问时没有显示网站表,我如何找到它?

    python - 后处理并读取模糊的数字-OpenCV/tesseract

    python - 属性错误 : 'str' object has no attribute 'errno'

    python - 无法使用 IE Internet 选项中设置的代理运行 IEDriverServer.exe