SciPy, as of version 1.4.0, contains an implementation of Hopcroft--Karp in scipy.sparse.csgraph.maximum_bipartite_matching
that compares favorably to NetworkX, performance-wise. The function exists in previous versions as well but then assumes a perfect matching to; this assumption is lifted in 1.4.0.
Exactly how well it does will depend on the structure of the bipartite graph, but just by taking random graphs (and ignoring the time it will take NetworkX to initialize the underlying data structures), I get around 200x performance improvements:
import networkx as nx
from scipy.sparse import rand
from scipy.sparse.csgraph import maximum_bipartite_matching
n = 5000
graph = rand(n, n, density=.1, format='csr', random_state=42)
G = nx.algorithms.bipartite.from_biadjacency_matrix(graph)
>>> %timeit maximum_bipartite_matching(graph, perm_type='column')
8.95 ms ± 183 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
>>> %timeit nx.algorithms.bipartite.maximum_matching(G, top_nodes=range(n))
2.01 s ± 118 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)