Я создаю онлайн-просмотрщик шрифтов со следующей архитектурой. Я завернул функцию создания предварительного просмотра в автономном .py-файле и сделал системные вызовы для него в представлении Django, чтобы запускать их в параллельной и максимальной производительности в многоядерной системе ЦП.Оптимизация кода на Python
preview.py
....
def make_preview(text, fontfile, imagefile, fontsize=30):
try:
font = ImageFont.truetype(fontfile, fontsize)
text_width, text_height = font.getsize(text)
img = Image.new('RGBA', (text_width, text_height))
draw = ImageDraw.Draw(img)
draw.text((0, 0), text, font=font, fill=(0, 0, 0))
return True
except:
return False
if __name__=='__main__':
make_preview(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])
views.py
...
def ajax_preview(resquest):
ttf_file_list = [construct a list of .ttf files]
image_list = []
for ttf_file in ttf_file_list:
image_file = ttf_file.replace('.ttf', '.png')
image_list.append(image_file)
subprocess.Popen(['python', 'preview.py', text, ttf_file, image_file, 30)
return HttpResponse(image_list)
Можно ли сделать выше код еще быстрее? Может быть, есть лучшая архитектура для этой работы или любая оптимизация, которую я могу сделать для кода?
Согласен. Сделайте несколько параллельно, чтобы сэкономить время. – steveha