[Python-Dev] pyparallel and new memory API discussions...
cf.natali at gmail.com
Wed Jun 19 16:01:49 CEST 2013
2013/6/19 Trent Nelson <trent at snakebite.org>:
> The new memory API discussions (and PEP) warrant a quick pyparallel
> update: a couple of weeks after PyCon, I came up with a solution for
> the biggest show-stopper that has been plaguing pyparallel since its
> inception: being able to detect the modification of "main thread"
> Python objects from within a parallel context.
> For example, `data.append(4)` in the example below will generate an
> AssignmentError exception, because data is a main thread object, and
> `data.append(4)` gets executed from within a parallel context::
> data = [ 1, 2, 3 ]
> def work():
> The solution turned out to be deceptively simple:
> 1. Prior to running parallel threads, lock all "main thread"
> memory pages as read-only (via VirtualProtect on Windows,
> mprotect on POSIX).
> 2. Detect attempts to write to main thread pages during parallel
> thread execution (via SEH on Windows or a SIGSEGV trap on POSIX),
> and raise an exception instead (detection is done in the ceval
> frame exec loop).
Quick stupid question: because of refcounts, the pages will be written
to even in case of read-only access. How do you deal with this?
More information about the Python-Dev