Python версия 3.5.6
# main.py #
import os
import sys
import subprocess
from datetime import datetime
import multiprocessing as mp
from util import _gzsl_arg_template, _zsl_arg_template
os.environ['CUDA_VISIBLE_DEVICES'] = '2'
# Experimental Setting
EXP_SET = '/zsl'
MODEL = '/argan'
EXP = '/e3_difD'
MODEL_PATH = './model' + MODEL
EXP_PATH = './exp' + EXP_SET + MODEL + EXP
DATASETS = ['/CUB', '/FLO']
# Arguments to Test
TEST_ARG = '--d_hl'
TEST_VALUE = [1,2,3]
for dataset in DATASETS:
if EXP_SET == '/gzsl':
arg_template = _gzsl_arg_template.get(dataset)
else:
arg_template = _zsl_arg_template.get(dataset)
pool = mp.Pool(processes=len(TEST_VALUE))
for value in TEST_VALUE:
arg_template[TEST_ARG] = value
arg_list = []
for (key,data) in arg_template.items():
arg_list.append(key)
arg_list.append(str(data))
arg_list.insert(0, MODEL_PATH+EXP+'.py')
arg_list.insert(0, 'python3')
result_file = EXP_PATH + dataset + '/value_' + str(value) + '.txt'
with open(result_file, 'w') as r_file:
print('\n##########################################', file=r_file)
print('Exp Info: \n\t type: {0}\n\t model: {1}\n\t exp: {2}\n\t time: {3}'.format('generalized zero-shot', MODEL, EXP, datetime.now().strftime('%Y-%m-%d %H:%M:%S')), file=r_file)
print('##########################################', file=r_file)
pool.apply_async(func=subprocess.run, kwds=dict(args=arg_list, stdout=r_file))
pool.close()
pool.join()
Выше мой файл Python для запуска. Проблема в том, что когда я запускаю код с python main.py
, процесс не добавляется в пул.
Полагаю, с аргументами должна быть какая-то проблема. Итак, я проверил спецификацию вызовов на официальном документе Python, но ошибки нет. И когда я просто использую subprocess.run(arg_list, stdout=r_file)
, код корректен для запуска.
Я просто делаю следующее:
def err(e):
print(e)
и заменяю
apply_async(func=subprocess.run, kwds=dict(args=arg_list, stdout=r_file))
на:
apply_async(func=subprocess.run, kwds=dict(args=arg_list, stdout=r_file), error_callback=err)
Вывод:
cannot serialize '_io.TextIOWrapper' object
Не могу понять, что не так с звонящим. Помощь