pyosrm icon indicating copy to clipboard operation
pyosrm copied to clipboard

Memory leak

Open ZhiWeiCui opened this issue 4 years ago • 7 comments

Hi:

Thank you so much for providing an amazing package.

Use this package according to the method you said. When the route method is executed multiple times, it is found that the memory keeps increasing. I don't know if you have encountered this situation.

Looking forward to your reply!

ZhiWeiCui avatar Jun 02 '21 08:06 ZhiWeiCui

Hello @ZhiWeiCui, much sorry for the delay. I will be supporting this package again, and will look this up. I haven't encountered this situation, but will try to reproduce and debug it as soon as possible.

Thanks for letting me know.

enricodvn avatar Jan 26 '22 02:01 enricodvn

Thanks, that really helps. I will take a look.

enricodvn avatar Nov 14 '22 15:11 enricodvn

This question has really bothered me for a long time. I adjusted my test script, and attach my test results.

Thank you again for your attention!

import numpy as np
from collections import namedtuple
import subprocess, os, re, sys
import datetime
# from osrmcpy import OSRM, Coordinate
from pyosrm import PyOSRM, Status
# from PyOSRM import PyOSRM

pid = os.getpid()

def randomly_location(n,
                      extents=None,
                      center=(39.916042, 116.401969),
                      box_size=10):
    Location = namedtuple('Location', ['lat', 'lon'])
    if extents is not None:
        #: Location[lat,lon]: the centre point of the area.
        center = Location(extents['urcrnrlat'] - 0.5 * (extents['urcrnrlat'] - extents['llcrnrlat']),
                          extents['urcrnrlon'] - 0.5 * (extents['urcrnrlon'] - extents['llcrnrlon']))

        (clat, clon) = Location(center[0], center[1])
    else:
        #: Location[lat,lon]: the centre point of the area.
        (clat, clon) = Location(center[0], center[1])

        rad_earth = 6367  # km
        circ_earth = np.pi * rad_earth
        #: The lower left and upper right points
        extents = {
            'llcrnrlon': (clon - 180 * box_size / (circ_earth * np.cos(np.deg2rad(clat)))),
            'llcrnrlat': clat - 180 * box_size / circ_earth,
            'urcrnrlon': (clon + 180 * box_size / (circ_earth * np.cos(np.deg2rad(clat)))),
            'urcrnrlat': clat + 180 * box_size / circ_earth
        }

    stdv = 6  # the number of standard deviations 99.9% will be within +-3
    lats = (extents['llcrnrlat'] + np.random.randn(n) * (extents['urcrnrlat'] - extents['llcrnrlat']) / stdv)
    lons = (extents['llcrnrlon'] + np.random.randn(n) * (extents['urcrnrlon'] - extents['llcrnrlon']) / stdv)

    all_nodes_location = dict(zip(range(n), [Location(round(one[0], 6), round(one[1], 6)) for one in zip(lats, lons)]))
    return all_nodes_location


def convert_size(size):
    if size <1024:
        return size
    elif (size >= 1024) and (size < (1024 * 1024)):
        return "%.2f KB"%(size/1024)
    elif (size >= (1024*1024)) and (size < (1024*1024*1024)):
        return "%.2f MB"%(size/(1024*1024))
    else:
        return "%.2f GB"%(size/(1024*1024*1024))


def process_info(pid):
    res = subprocess.getstatusoutput('ps aux|grep ' + str(pid))[1].split('\n')[0]

    p = re.compile(r'\s+')
    l = p.split(res)
    info = {'user': l[0],
            'pid': l[1],
            'cpu': l[2],
            'mem': l[3],
            'vsa': convert_size(int(l[4])*1024),
            'rss': convert_size(int(l[5])*1024),
            'start_time': l[6]}
    return info

if __name__ == '__main__':
    # location
    number = 100
    location_start = randomly_location(number)
    location_end = randomly_location(number)

    # osrmcpy
    # DATA_DIR = '/mnt/d/Data/osrm/bicycle/ch'
    # OSRM_DATASET = os.path.join(DATA_DIR, 'china-latest.osrm')
    # router = OSRM(OSRM_DATASET.encode('utf-8'), contraction=True)

    # pyosrm
    # router = PyOSRM("/mnt/d/Data/osrm/bicycle/ch/china-latest.osrm")
    # router = PyOSRM("/mnt/d/Data/osrm/bicycle/mld/china-latest.osrm", algorithm="MLD")
    router = PyOSRM(use_shared_memory=True, algorithm='CH')

    # cPyOSRM
    # router = PyOSRM()

    for i, _ in enumerate(zip(location_start.values(), location_end.values())):
        start, end = _

        start_time = datetime.datetime.now()

        # osrmcpy
        # start = Coordinate(id=None, longitude=start[1], latitude=start[0])
        # end = Coordinate(id=None, longitude=end[1], latitude=end[0])
        # result = router.table([start, end])

        # pyosrm
        result = router.route([start[::-1], end[::-1]])
        # router.route([start[::-1], end[::-1]])

        # cPyOSRM
        # output = np.array((1, 1), dtype=np.float32)
        # router.table([start[1], end[1]],
        #              [start[0], end[0]],
        #              [0], [1],
        #              output)

        duration_Router = (datetime.datetime.now() - start_time).total_seconds()
        info = process_info(pid)
        info['duration'] = duration_Router
        # info['distance'] = round(result.json()['routes'][0]['distance']/1000, 3)
        info['router_size'] = sys.getsizeof(router)
        info['number_iter'] = i
        info['result'] = result.json()['code']
        # del result
        print(info)


# valgrind --tool=memcheck --leak-check=full  --track-origins=yes --leak-check=yes --log-file=memory_leak.log python ./tests/memory_leak.py  

Out:

{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '171', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '36.73 MB', 'start_time': 'pts/21', 'duration': 0.020575, 'router_size': 24, 'number_iter': 0, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '171', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '40.69 MB', 'start_time': 'pts/21', 'duration': 0.001956, 'router_size': 24, 'number_iter': 1, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '171', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '41.60 MB', 'start_time': 'pts/21', 'duration': 0.000759, 'router_size': 24, 'number_iter': 2, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '172', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '44.61 MB', 'start_time': 'pts/21', 'duration': 0.00515, 'router_size': 24, 'number_iter': 3, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '172', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '45.21 MB', 'start_time': 'pts/21', 'duration': 0.000643, 'router_size': 24, 'number_iter': 4, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '172', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '45.90 MB', 'start_time': 'pts/21', 'duration': 0.003929, 'router_size': 24, 'number_iter': 5, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '172', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '46.21 MB', 'start_time': 'pts/21', 'duration': 0.00042, 'router_size': 24, 'number_iter': 6, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '47.53 MB', 'start_time': 'pts/21', 'duration': 0.001331, 'router_size': 24, 'number_iter': 7, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '47.79 MB', 'start_time': 'pts/21', 'duration': 0.000381, 'router_size': 24, 'number_iter': 8, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '48.09 MB', 'start_time': 'pts/21', 'duration': 0.000352, 'router_size': 24, 'number_iter': 9, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '49.09 MB', 'start_time': 'pts/21', 'duration': 0.003555, 'router_size': 24, 'number_iter': 10, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '49.46 MB', 'start_time': 'pts/21', 'duration': 0.000554, 'router_size': 24, 'number_iter': 11, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '173', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '49.66 MB', 'start_time': 'pts/21', 'duration': 0.000529, 'router_size': 24, 'number_iter': 12, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '174', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '49.91 MB', 'start_time': 'pts/21', 'duration': 0.00362, 'router_size': 24, 'number_iter': 13, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '174', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '50.20 MB', 'start_time': 'pts/21', 'duration': 0.000694, 'router_size': 24, 'number_iter': 14, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '174', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '50.87 MB', 'start_time': 'pts/21', 'duration': 0.007175, 'router_size': 24, 'number_iter': 15, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '174', 'mem': '0.1', 'vsa': '6.63 GB', 'rss': '50.96 MB', 'start_time': 'pts/21', 'duration': 0.000553, 'router_size': 24, 'number_iter': 16, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '174', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '51.14 MB', 'start_time': 'pts/21', 'duration': 0.000729, 'router_size': 24, 'number_iter': 17, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '175', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '52.66 MB', 'start_time': 'pts/21', 'duration': 0.002889, 'router_size': 24, 'number_iter': 18, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '175', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '53.36 MB', 'start_time': 'pts/21', 'duration': 0.000807, 'router_size': 24, 'number_iter': 19, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '176', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '53.39 MB', 'start_time': 'pts/21', 'duration': 0.000524, 'router_size': 24, 'number_iter': 20, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '176', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '53.48 MB', 'start_time': 'pts/21', 'duration': 0.000713, 'router_size': 24, 'number_iter': 21, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '176', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '53.71 MB', 'start_time': 'pts/21', 'duration': 0.000678, 'router_size': 24, 'number_iter': 22, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '176', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '54.14 MB', 'start_time': 'pts/21', 'duration': 0.000614, 'router_size': 24, 'number_iter': 23, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '176', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '54.73 MB', 'start_time': 'pts/21', 'duration': 0.004057, 'router_size': 24, 'number_iter': 24, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.14 MB', 'start_time': 'pts/21', 'duration': 0.001186, 'router_size': 24, 'number_iter': 25, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.21 MB', 'start_time': 'pts/21', 'duration': 0.000453, 'router_size': 24, 'number_iter': 26, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.35 MB', 'start_time': 'pts/21', 'duration': 0.000562, 'router_size': 24, 'number_iter': 27, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.35 MB', 'start_time': 'pts/21', 'duration': 0.000326, 'router_size': 24, 'number_iter': 28, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.38 MB', 'start_time': 'pts/21', 'duration': 0.00048, 'router_size': 24, 'number_iter': 29, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.41 MB', 'start_time': 'pts/21', 'duration': 0.000508, 'router_size': 24, 'number_iter': 30, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '177', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '56.96 MB', 'start_time': 'pts/21', 'duration': 0.000637, 'router_size': 24, 'number_iter': 31, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '58.35 MB', 'start_time': 'pts/21', 'duration': 0.004588, 'router_size': 24, 'number_iter': 32, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '58.41 MB', 'start_time': 'pts/21', 'duration': 0.000431, 'router_size': 24, 'number_iter': 33, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '58.50 MB', 'start_time': 'pts/21', 'duration': 0.000411, 'router_size': 24, 'number_iter': 34, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.04 MB', 'start_time': 'pts/21', 'duration': 0.000885, 'router_size': 24, 'number_iter': 35, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.30 MB', 'start_time': 'pts/21', 'duration': 0.000496, 'router_size': 24, 'number_iter': 36, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.43 MB', 'start_time': 'pts/21', 'duration': 0.000669, 'router_size': 24, 'number_iter': 37, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '178', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.45 MB', 'start_time': 'pts/21', 'duration': 0.000311, 'router_size': 24, 'number_iter': 38, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.56 MB', 'start_time': 'pts/21', 'duration': 0.000586, 'router_size': 24, 'number_iter': 39, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.59 MB', 'start_time': 'pts/21', 'duration': 0.000418, 'router_size': 24, 'number_iter': 40, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.60 MB', 'start_time': 'pts/21', 'duration': 0.00039, 'router_size': 24, 'number_iter': 41, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.89 MB', 'start_time': 'pts/21', 'duration': 0.000649, 'router_size': 24, 'number_iter': 42, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '59.96 MB', 'start_time': 'pts/21', 'duration': 0.000449, 'router_size': 24, 'number_iter': 43, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '179', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '60.00 MB', 'start_time': 'pts/21', 'duration': 0.000492, 'router_size': 24, 'number_iter': 44, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '60.00 MB', 'start_time': 'pts/21', 'duration': 0.000271, 'router_size': 24, 'number_iter': 45, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '60.64 MB', 'start_time': 'pts/21', 'duration': 0.000981, 'router_size': 24, 'number_iter': 46, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '61.25 MB', 'start_time': 'pts/21', 'duration': 0.000769, 'router_size': 24, 'number_iter': 47, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '61.58 MB', 'start_time': 'pts/21', 'duration': 0.000949, 'router_size': 24, 'number_iter': 48, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '61.85 MB', 'start_time': 'pts/21', 'duration': 0.000743, 'router_size': 24, 'number_iter': 49, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '61.91 MB', 'start_time': 'pts/21', 'duration': 0.00051, 'router_size': 24, 'number_iter': 50, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '180', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.16 MB', 'start_time': 'pts/21', 'duration': 0.000503, 'router_size': 24, 'number_iter': 51, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '181', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.20 MB', 'start_time': 'pts/21', 'duration': 0.000464, 'router_size': 24, 'number_iter': 52, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '181', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.35 MB', 'start_time': 'pts/21', 'duration': 0.000757, 'router_size': 24, 'number_iter': 53, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.57 MB', 'start_time': 'pts/21', 'duration': 0.002555, 'router_size': 24, 'number_iter': 54, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.64 MB', 'start_time': 'pts/21', 'duration': 0.000548, 'router_size': 24, 'number_iter': 55, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.76 MB', 'start_time': 'pts/21', 'duration': 0.000563, 'router_size': 24, 'number_iter': 56, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.77 MB', 'start_time': 'pts/21', 'duration': 0.000527, 'router_size': 24, 'number_iter': 57, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.88 MB', 'start_time': 'pts/21', 'duration': 0.00072, 'router_size': 24, 'number_iter': 58, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '182', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '62.93 MB', 'start_time': 'pts/21', 'duration': 0.000682, 'router_size': 24, 'number_iter': 59, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.55 MB', 'start_time': 'pts/21', 'duration': 0.000935, 'router_size': 24, 'number_iter': 60, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.64 MB', 'start_time': 'pts/21', 'duration': 0.000718, 'router_size': 24, 'number_iter': 61, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.65 MB', 'start_time': 'pts/21', 'duration': 0.000435, 'router_size': 24, 'number_iter': 62, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.70 MB', 'start_time': 'pts/21', 'duration': 0.000447, 'router_size': 24, 'number_iter': 63, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.82 MB', 'start_time': 'pts/21', 'duration': 0.000673, 'router_size': 24, 'number_iter': 64, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '183', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.89 MB', 'start_time': 'pts/21', 'duration': 0.000493, 'router_size': 24, 'number_iter': 65, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.93 MB', 'start_time': 'pts/21', 'duration': 0.000218, 'router_size': 24, 'number_iter': 66, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.94 MB', 'start_time': 'pts/21', 'duration': 0.000379, 'router_size': 24, 'number_iter': 67, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '63.96 MB', 'start_time': 'pts/21', 'duration': 0.00053, 'router_size': 24, 'number_iter': 68, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '64.05 MB', 'start_time': 'pts/21', 'duration': 0.000379, 'router_size': 24, 'number_iter': 69, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '64.05 MB', 'start_time': 'pts/21', 'duration': 0.000678, 'router_size': 24, 'number_iter': 70, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '64.36 MB', 'start_time': 'pts/21', 'duration': 0.000557, 'router_size': 24, 'number_iter': 71, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '184', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '64.36 MB', 'start_time': 'pts/21', 'duration': 0.000623, 'router_size': 24, 'number_iter': 72, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '185', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '64.38 MB', 'start_time': 'pts/21', 'duration': 0.000398, 'router_size': 24, 'number_iter': 73, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '92.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.02 MB', 'start_time': 'pts/21', 'duration': 0.000698, 'router_size': 24, 'number_iter': 74, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '92.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.03 MB', 'start_time': 'pts/21', 'duration': 0.000255, 'router_size': 24, 'number_iter': 75, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '92.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.08 MB', 'start_time': 'pts/21', 'duration': 0.000373, 'router_size': 24, 'number_iter': 76, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '92.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.12 MB', 'start_time': 'pts/21', 'duration': 0.000549, 'router_size': 24, 'number_iter': 77, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '92.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.25 MB', 'start_time': 'pts/21', 'duration': 0.000498, 'router_size': 24, 'number_iter': 78, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.25 MB', 'start_time': 'pts/21', 'duration': 0.000525, 'router_size': 24, 'number_iter': 79, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.26 MB', 'start_time': 'pts/21', 'duration': 0.000404, 'router_size': 24, 'number_iter': 80, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.74 MB', 'start_time': 'pts/21', 'duration': 0.004714, 'router_size': 24, 'number_iter': 81, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.75 MB', 'start_time': 'pts/21', 'duration': 0.000375, 'router_size': 24, 'number_iter': 82, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '65.97 MB', 'start_time': 'pts/21', 'duration': 0.000656, 'router_size': 24, 'number_iter': 83, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.19 MB', 'start_time': 'pts/21', 'duration': 0.000549, 'router_size': 24, 'number_iter': 84, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.21 MB', 'start_time': 'pts/21', 'duration': 0.000363, 'router_size': 24, 'number_iter': 85, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.26 MB', 'start_time': 'pts/21', 'duration': 0.000412, 'router_size': 24, 'number_iter': 86, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.26 MB', 'start_time': 'pts/21', 'duration': 0.000381, 'router_size': 24, 'number_iter': 87, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.28 MB', 'start_time': 'pts/21', 'duration': 0.000482, 'router_size': 24, 'number_iter': 88, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.28 MB', 'start_time': 'pts/21', 'duration': 0.000407, 'router_size': 24, 'number_iter': 89, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '93.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.29 MB', 'start_time': 'pts/21', 'duration': 0.000472, 'router_size': 24, 'number_iter': 90, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.54 MB', 'start_time': 'pts/21', 'duration': 0.000705, 'router_size': 24, 'number_iter': 91, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '66.54 MB', 'start_time': 'pts/21', 'duration': 0.000457, 'router_size': 24, 'number_iter': 92, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.34 MB', 'start_time': 'pts/21', 'duration': 0.000803, 'router_size': 24, 'number_iter': 93, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.34 MB', 'start_time': 'pts/21', 'duration': 0.000352, 'router_size': 24, 'number_iter': 94, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.41 MB', 'start_time': 'pts/21', 'duration': 0.000682, 'router_size': 24, 'number_iter': 95, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.41 MB', 'start_time': 'pts/21', 'duration': 0.000534, 'router_size': 24, 'number_iter': 96, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '94.5', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.75 MB', 'start_time': 'pts/21', 'duration': 0.001053, 'router_size': 24, 'number_iter': 97, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '95.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.76 MB', 'start_time': 'pts/21', 'duration': 0.000371, 'router_size': 24, 'number_iter': 98, 'result': 'Ok'}
{'user': 'cuizhiw+', 'pid': '25448', 'cpu': '95.0', 'mem': '0.2', 'vsa': '6.63 GB', 'rss': '67.88 MB', 'start_time': 'pts/21', 'duration': 0.000527, 'router_size': 24, 'number_iter': 99, 'result': 'Ok'}

ZhiWeiCui avatar Nov 15 '22 03:11 ZhiWeiCui

Thanks for you effort. I was able to reproduce it. Will work on a fix.

enricodvn avatar Nov 17 '22 02:11 enricodvn

@ZhiWeiCui I was able to fix the problem. It was missing latitudes, longitudes and coordinates objects clean-up in the route method. Will open the PR soon.

I needed to keep track of object pointers so I could cleanup later, so the method will now looks like:

    def route(self, route_coords, generate_hints=True):
        cdef:
             osrm.FloatLongitude** longitudes = <osrm.FloatLongitude**> malloc(
                 len(route_coords) * sizeof(osrm.FloatLongitude*))
             osrm.FloatLatitude** latitudes = <osrm.FloatLatitude**> malloc(
                 len(route_coords) * sizeof(osrm.FloatLatitude*))
             osrm.Coordinate** coords = <osrm.Coordinate**> malloc(
                 len(route_coords) * sizeof(osrm.Coordinate*))
             osrm.RouteParameters *params = new osrm.RouteParameters()

        params[0].generate_hints = generate_hints

        for i, coord in enumerate(route_coords):
            longitudes[i] = new osrm.FloatLongitude()
            latitudes[i] = new osrm.FloatLatitude()
            longitudes[i][0].__value = <double>coord[0]
            latitudes[i][0].__value = <double>coord[1]
            coords[i] = new osrm.Coordinate(longitudes[i][0], latitudes[i][0])
            params[0].coordinates.push_back(coords[i][0])

        result = RouteResult()

        cdef osrm.Status status = self._thisptr[0].Route(params[0], result._thisptr[0])

        result.set_status(status)

        # cleanup
        for i, coord in enumerate(route_coords):
            del longitudes[i]
            del latitudes[i]
            del coords[i]
        free(longitudes)
        free(latitudes)
        free(coords)
        del params

        return result

It was also missing a clean-up in the RouteResult class.

Are you using the pre-built wheels or compiling?

I will take the chance of the release to include the wheels for newer python versions.

enricodvn avatar Nov 17 '22 15:11 enricodvn

I using the compiling for local debugging, and pre-built wheels for produce in linux.

Looking forward to the release.

ZhiWeiCui avatar Nov 18 '22 02:11 ZhiWeiCui

Hi, any news about this? :)

davidmurray avatar Dec 15 '22 23:12 davidmurray