Do the JVM-based pythons solve any threading issues? Plain parallel java
seems indispensable.

Bill 

--

Phobrain.com 

On 2025-07-03 05:05, Nathan via NumPy-Discussion wrote:

> If a NumPy array is shared between two threads, NumPy doesn't do anything to 
> synchronize array access. This is true in all Python versions and build 
> configurations - since NumPy releases the GIL during most array operations 
> whether or not you're using free-threaded Python doesn't change much except 
> for e.g. object arrays, which do hold the GIL. 
> 
> See:  
> https://numpy.org/doc/stable/reference/thread_safety.html 
> 
> IMO you probably shouldn't try to enforce more strict thread safety than 
> NumPy itself does. 
> 
> We didn't add any locking to support free-threaded Python because it's always 
> worked like this, and introducing locking might lead to performance 
> bottlenecks in read-only multithreaded applications and would substantially 
> increase NumPy's internal complexity. 
> 
> Long-term, I'd like to see more effort put towards adding stronger guarantees 
> around freezing arrays. I also want to look closer at adding runtime checks 
> to detect races and report them. One example: you could imagine each array 
> having an internal "version" counter that is incremented every time the array 
> is mutated. Doing an atomic read on the version before and after a mutation 
> should hopefully have a small overhead compared with the rest of NumPy, and 
> we could report runtime errors when arrays are mutated "underneath" a thread 
> doing an operation. 
> 
> The devil is in the details though - there are *a lot* of ways to mutate 
> NumPy arrays. This also doesn't consider the buffer protocol or accessing 
> arrays via third-party C extensions. See e.g. Alex Gaynor's blog post on this 
> from the perspective of Rust and PyO3: 
> 
> https://alexgaynor.net/2022/oct/23/buffers-on-the-edge/ 
> 
> On Thu, Jul 3, 2025 at 5:50 AM Benjamin Root via NumPy-Discussion 
> <numpy-discussion@python.org> wrote: 
> 
> On a related note, does numpy's gufunc mechanism provide any thread safety, 
> or is the responsibility on the extension writer to do that? For simple numpy 
> array inputs, I would think that I don't have to worry about free-threaded 
> python messing things up (unless I have a global state), I'm wondering if 
> something like dask array inputs could mess up calls to a thread-unsafe 
> function. 
> 
> If it is on the extension writer, are there any examples on how to do that? 
> Are there other guarantees (or lack thereof) that a gufunc writer should be 
> aware of? How about reorderability? gufuncs operates on subarrays, so 
> wouldn't dask inputs that are chunked potentially operate on the chunks in 
> any order they like? 
> 
> Thanks, 
> Ben Root 
> 
> On Tue, Jul 1, 2025 at 4:26 PM Benjamin Root <ben.v.r...@gmail.com> wrote: 
> 
> Warren, 
> 
> The examples in ufunclab helped clear up a few things and I was able to 
> experiment and get a working gufunc! Thank you for your help! 
> 
> Ben Root 
> 
> On Fri, Jun 27, 2025 at 8:54 PM Benjamin Root <ben.v.r...@gmail.com> wrote: 
> 
> Warren, 
> 
> I'm fine with implementing it in C. I just didn't think gufuncs were for me. 
> I couldn't tell from the description if it would be for my usecase since I 
> wasn't looping over subarrays, and I didn't see any good examples. Maybe the 
> documentation could be clearer. I'll have a look at your examples. 
> 
> I did try that signature with np.vectorize() with the signature keyword 
> argument, but it didn't seem to work. Maybe it didn't work for the reasons in 
> that open issue. 
> 
> Thank you, 
> Ben Root 
> 
> On Fri, Jun 27, 2025 at 8:03 PM Warren Weckesser via NumPy-Discussion 
> <numpy-discussion@python.org> wrote: On Fri, Jun 27, 2025 at 5:29 PM Benjamin 
> Root via NumPy-Discussion
> <numpy-discussion@python.org> wrote:
>> 
>> I'm looking at a situation where I like to wrap a C++ function that takes 
>> two doubles as inputs, and returns an error code, a position vector, and a 
>> velocity vector so that I essentially would have a function signature of 
>> (N), (N) -> (N), (N, 3), (N, 3). When I try to use np.vectorize() or 
>> np.frompyfunc() on the python version of this function, I keep running into 
>> issues where it wants to make the outputs into object arrays of tuples. And 
>> looking at utilizing PyUFunc_FromFuncAndData, it isn't clear to me how I can 
>> tell it to expect those two output arrays to have a size 3 outer dimension.
>> 
>> Are ufuncs the wrong thing here? How should I go about this? Is it even 
>> possible?
> 
> Ben,
> 
> It looks like the simplest signature for your core operation would be
> (),()->(),(3),(3), with broadcasting taking care of higher dimensional
> inputs.  Because not all the core shapes are scalars, that would
> require a *generalized* ufunc (gufunc).  There is an open issue
> (https://github.com/numpy/numpy/issues/14020) with a request for a
> function to generate a gufunc from a Python function.
> 
> numba has the @guvectorize decorator, but I haven't use it much, and
> in my few quick attempts just now, it appeared to not accept fixed
> integer sizes in the output shape.  But wait to see if any numba gurus
> respond with a definitive answer about whether or not it can handle
> the shape signature (),()->(),(3),(3).
> 
> You could implement the gufunc in a C or C++ extension module, if you
> don't mind the additional development effort and packaging hassle.  I
> know that works--I've implemented quite a few gufuncs in ufunclab
> (https://github.com/WarrenWeckesser/ufunclab).
> 
> Warren
> 
>> 
>> Thanks in advance,
>> Ben Root
>> _______________________________________________
>> NumPy-Discussion mailing list -- numpy-discussion@python.org
>> To unsubscribe send an email to numpy-discussion-le...@python.org
>> https://mail.python.org/mailman3//lists/numpy-discussion.python.org
>> Member address: warren.weckes...@gmail.com
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3//lists/numpy-discussion.python.org
> Member address: ben.v.r...@gmail.com
 _______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3//lists/numpy-discussion.python.org
Member address: nathan12...@gmail.com 
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3//lists/numpy-discussion.python.org
Member address: bross_phobr...@sonic.net
_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3//lists/numpy-discussion.python.org
Member address: arch...@mail-archive.com

Reply via email to