[Cython] cython.parallel tasks, single, master, critical, barriers

Dag Sverre Seljebotn d.s.seljebotn at astro.uio.no
Wed Oct 12 11:24:45 CEST 2011


On 10/12/2011 11:08 AM, Robert Bradshaw wrote:
> On Wed, Oct 12, 2011 at 1:36 AM, Dag Sverre Seljebotn
>> I wouldn't resist a builtin "channel" type in Cython (since we don't have
>> full templating/generics, it would be the only way of sending typed data
>> conveniently?).
>
> zeromq seems to be a nice level of abstraction--we could probably get
> far with a zeromq "overlay" module that didn't require the GIL. Or is
> the C API easy enough to use if we could provide convenient mechanisms
> to initialize the tasks/threads. I think perhaps the communication
> model could be solved by a library more easily than the treading
> model.

Ah, zeromq even has an in-process transport, so should work nicely for 
multithreading as well.

The main problem is that I'd like something like

ctypedef struct Msg:
     int what
     double when

cdef Msg msg
cdef channel[Msg] mychan = channel[msg](blocking=True, in_process=True)
with cython.parallel:
     ...
     if is_master():
         mychan.send(what=1, when=2.3)
     else:
         msg = mychan.recv()


Which one can't really do without either builtin support or templating 
support. One *could* implement it in C++...

C-level API just sends char* around, e.g.,

int zmq_msg_init_data (zmq_msg_t *msg, void *data, size_t size, 
zmq_free_fn *ffn, void *hint);

Dag Sverre


More information about the cython-devel mailing list