У меня есть код, который генерирует большое количество изображений png с помощью matplotlib pcolormesh.Изображения имеют высокое разрешение, поэтому для их построения требуется некоторое время.Я старался максимально сократить время прорисовки, не ставя под угрозу чистый внешний вид графики, но каждое изображение все равно занимает ~ 15-20 секунд для сохранения в файл.
Проблема в том, что этот код должен работать в рабочем режиме, когда изображения будут генерироваться каждые ~ 5 минут, когда скрипт запускается в crontab (по мере появления новых данных).Только для 1 переменной я генерирую изображения для 6 (или более разных регионов), циклически перебирая словарь, содержащий границы моих разных доменов карты:
# Using the 'Agg' backend because this will be run automatically
# Not sure if there are any faster alternatives to Agg
import matplotlib
matplotlib.use('Agg')
# The map domains used:
domains = {'neweng': [40.7, 48, -80, -66], 'midatl': [35.5, 45, -87.5, -70]}
# Pull data from a file and do some calculations
# Now we plot for each domain
for region, constraint in domains.iteritems():
# region is name of domain, constraints are the values of lat/lon min and max
mH = Basemap(projection='mill', llcrnrlon=constraint[2], \
urcrnrlon=constraint[3], llcrnrlat=constraint[0], \
urcrnrlat=constraint[1], resolution='h')
# Simplified version of plotting
plt.figure(figsize=[15,12])
mH.pcolormesh(lons, lats, Twf, cmap=my_cmap, shading='gouraud')
mH.drawcoastlines()
mH.drawcountries()
mH.drawstates()
mH.drawcounties()
# Do some other stuff
plt.savefig('/home/kschneider/Documents/wetbulb/Images/' + region + fcst_hr_str, bbox_inches='tight')
Я читал об использовании подпроцессинга в Python для построения несколькихизображения одновременно, используя несколько ядер, но я не уверен, как применить это к моей ситуации.В этом случае я бы хотел построить несколько «доменов» одновременно.
Кроме того, я бы приветствовал любые другие предложения о том, как улучшить скорость.
Вывод кода: Пример вывода