Skip to content

Free GIL when running check_bytes_arrays_within_dist #23

@RandomNameUser

Description

@RandomNameUser

The check_bytes_arrays_within_dist function has the potential to take a long time when searching in a large array. It would be helpful if the lib could free the GIL to let other threads run while that is going on.

Never having written a C Python extension, if I interpret the docs (https://docs.python.org/3/c-api/init.html#c.Py_BEGIN_ALLOW_THREADS) right, all it would take to do that is to add Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS macros and remove the in-loop return, i.e. change the loop to:

    int return_value = -1;

    Py_BEGIN_ALLOW_THREADS

    int res;
    uint64_t number_of_elements = big_array_size / small_array_size;
    uint8_t* pBig = big_array;
    for (uint64_t i = 0; i < number_of_elements; i++, pBig += small_array_size) {
        res = (int)ptr__hamming_distance_bytes(pBig, small_array, small_array_size, max_dist);
        if (res == 1)
            return_value = i;
            break;
        }

    Py_END_ALLOW_THREADS

   return Py_BuildValue("i", return_value);

I don't have a good way to test this right now, but it seems trivial enough. I would appreciate if you could give this a try.

Thanks for a greatly useful little library. Stuff like this is why I love Python! ;)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions