Deutsch   English   Français   Italiano  
<mailman.22.1720443071.2981.python-list@python.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!2.eu.feeder.erje.net!feeder.erje.net!fu-berlin.de!uni-berlin.de!not-for-mail
From: Left Right <olegsivokon@gmail.com>
Newsgroups: comp.lang.python
Subject: Re: Best (simplest) way to share data between processes
Date: Sun, 7 Jul 2024 23:55:09 +0200
Lines: 65
Message-ID: <mailman.22.1720443071.2981.python-list@python.org>
References: <9a8nlk-jb81.ln1@q957.zbmc.eu>
 <CAJQBtgn3t+ADURKODqMc3BDoK9v_1hP098AXxi0_JeLqWSAAHg@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Trace: news.uni-berlin.de GAG+BT1mEWop8rUORP9EBQPtYBPfK0pnqbDWz7Qfkn8g==
Cancel-Lock: sha1:k0bi5e2EGfmF2e+S3hx42xx7Zzk= sha256:cDWinOQVMOtO7rBi67s9uNH+9BSjXBqrlnMIUQkpPJY=
Return-Path: <olegsivokon@gmail.com>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
 reason="2048-bit key; unprotected key"
 header.d=gmail.com header.i=@gmail.com header.b=HkHIvx95;
 dkim-adsp=pass; dkim-atps=neutral
X-Spam-Status: OK 0.004
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'jul': 0.04; '(for': 0.05;
 'fairly': 0.05; "python's": 0.05; 'usage': 0.05; 'http': 0.07;
 'queue': 0.07; 'sun,': 0.07; 'approach?': 0.09; 'fact,': 0.09;
 'linux': 0.09; 'raspberry': 0.09; 'solution,': 0.09;
 'subject:between': 0.09; 'url:mailman': 0.15; '2024': 0.16; 'bus':
 0.16; 'directly,': 0.16; 'guarantees': 0.16; 'script,': 0.16;
 'subject:way': 0.16; 'utilities': 0.16; 'writes': 0.16; 'wrote:':
 0.16; 'values': 0.17; 'instead': 0.17; 'uses': 0.19; 'server.':
 0.19; 'to:addr:python-list': 0.20; 'run': 0.23; 'idea': 0.24;
 'url-ip:188.166.95.178/32': 0.25; 'url-ip:188.166.95/24': 0.25;
 'url:listinfo': 0.25; 'url-ip:188.166/16': 0.25; 'again,': 0.26;
 'do,': 0.26; "isn't": 0.27; 'chris': 0.28; 'requests': 0.28;
 'present': 0.30; 'takes': 0.31; 'putting': 0.31; 'url-ip:188/8':
 0.31; 'program': 0.31; 'think': 0.32; 'needed,': 0.32; 'python-
 list': 0.32; 'message-id:@mail.gmail.com': 0.32; 'but': 0.32;
 "i'm": 0.33; 'there': 0.33; 'server': 0.33; 'same': 0.34;
 'package': 0.34; 'header:In-Reply-To:1': 0.34;
 'received:google.com': 0.34; 'running': 0.34; 'one.': 0.35;
 'runs': 0.35; 'from:addr:gmail.com': 0.35; 'processes': 0.36;
 'change': 0.36; 'using': 0.37; 'file': 0.38; 'way': 0.38; 'could':
 0.38; 'read': 0.38; 'two': 0.39; 'single': 0.39; 'use': 0.39;
 'rest': 0.39; 'still': 0.40; 'whenever': 0.40; 'want': 0.40;
 'try': 0.40; 'simply': 0.63; 'feel': 0.63; 'complete': 0.64;
 'lock': 0.64; 'thus': 0.64; 'transaction': 0.64; 'your': 0.64;
 'url-ip:45/8': 0.65; 'look': 0.65; 'well': 0.65; 'time.': 0.66;
 'prevent': 0.67; 'obvious': 0.69; 'care': 0.71; "you'll": 0.73;
 'easy': 0.74; 'free.': 0.76; 'monitor': 0.81; 'boat': 0.84;
 'executing': 0.84; 'orders': 0.84; 'simultaneous': 0.84;
 'battery': 0.93; 'green': 0.96
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1720389320; x=1720994120; darn=python.org;
 h=content-transfer-encoding:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=ayPmrE6qYmVeEl25ntZOH593YhfAaxiJTEhv/anjnX4=;
 b=HkHIvx95+nuCXAW+wri4YapBT4C/Nfapp0uxhKz2fH7EsLhiUcnxjhRyoS7Ju6Uaah
 ViRthGU5qFoYRmnakyRsuW7ksQWmLsEVN51JHT8AvpPpfqZ1f5iAGaSlzoMslcLLS2xe
 hC8aZxOdc5VsCYxLdfBY9Jk7PSPdXg1Ethj48noOl3TpvNV7HBRTxvP1WD48kN4/QaV3
 rZsBrAWhyCpQRMD13yy9DDsazTUY1mPo85UglErxd4ymU8RLLGd2Bjw6ecD9f+gVIomQ
 mN7qP8EoS4dcnNINzBqNyzgUmG7xXp3ASndLCi3fnwi5HsNcGAVcJMcDfTBGaF2PWFOm
 sKqg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1720389320; x=1720994120;
 h=content-transfer-encoding:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=ayPmrE6qYmVeEl25ntZOH593YhfAaxiJTEhv/anjnX4=;
 b=Smr2dRtcqdwG+4gFkac03vFvDKw2SbsZPwDeZybpblDJVmV3t0gf1+2CXW/IfIUZhi
 e/nWrBgUH6HhOCsn3nwVnpSFKw75tHzBMal5FcVx63+slpbbDGSKrG9FD2X5PotVgDgV
 bcmOAF8IViWOb24TyuEelioFpjoPErzIivTZEJ6Qk7r6EdMN4UakFao34W3jX6+1QCdR
 2+gwDFkcMddqmOT9uMYDX5WN1NIvfoCeC5IntFkn3lxBkpzCOPJRxdFcuo5hGyd03ooZ
 Dn+clYtfQNPPDUeb5BlCzIQN4Vcnwxxr6UwpmMa1lQkkXzGwWrziyKjdrXDVFNw/XEKC
 YImQ==
X-Gm-Message-State: AOJu0YyD3x24mxb0XmSNlAXiRCZR1LAXOHBvTy/RcavnHYVu5wOLjD5e
 0Wkt1+sx+4Cfag6INXm4cUuqSHClnWP7QLDHSW6RQ5sVrDBPVqCO2leHtCfi1jPzj9N2nqK+08K
 rGAbwP5+XlEQ5pWzRAwZgjDWm5pNAlLLK
X-Google-Smtp-Source: AGHT+IHUUvaa/PZ3AFdXFbhVo8QdgKnltVQbYf5Rs6Wljl/MiiyNNoB5YyyVpqp7PGTtIwdtmj9dTv9l3YyOMkOqd98=
X-Received: by 2002:a05:622a:138d:b0:440:480a:8b69 with SMTP id
 d75a77b69052e-447cbf26054mr120675281cf.28.1720389320312; Sun, 07 Jul 2024
 14:55:20 -0700 (PDT)
In-Reply-To: <9a8nlk-jb81.ln1@q957.zbmc.eu>
X-Mailman-Approved-At: Mon, 08 Jul 2024 08:51:10 -0400
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
 <python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
 <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
 <mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <CAJQBtgn3t+ADURKODqMc3BDoK9v_1hP098AXxi0_JeLqWSAAHg@mail.gmail.com>
X-Mailman-Original-References: <9a8nlk-jb81.ln1@q957.zbmc.eu>
Bytes: 8631

If resource usage isn't an issue, then the _easy_ thing to do, that
would also be easily correct is to have a server doing all the
h/w-related reading and clients talking to that server. Use for the
server the technology you feel most confident with. Eg. you may use
Python's http package. I believe that the server from this package
runs in a single thread, and thus processes all requests
synchronously. So, you'll get synchronization for free.

Then, the rest of the scripts that need to talk to h/w will instead be
talking to this server.

Again, this isn't an _efficient_ solution... but, sometimes you don't
need one. And this one is easy to make, easy to debug, easy to expand.
But, if instead you were looking for a more efficient solution, then,
the general idea that allows the http server to work in this case
would still apply: have a single synchronization program that takes
requests asynchronously, and orders them. So, a basic TCP server would
also work as well as a UNIX socket. Your idea with holding a lock on a
file would also work (in fact, plenty of Linux utilities work that
way, eg. apt-get or yum).

----

If you don't want to change the existing script, then instead of
running them directly, you could run them through batch:
https://man7.org/linux/man-pages/man1/batch.1p.html this is a very
simply queuing program that's available for Linux. It will take care
of synchronization by putting the scripts you want to run in a queue
and executing them one at a time.

On Sun, Jul 7, 2024 at 11:12=E2=80=AFPM Chris Green via Python-list
<python-list@python.org> wrote:
>
> I have a Raspberry Pi in my boat that uses I2C to read a number of
> voltages and currents (using ADS1115 A2D) so I can monitor the battery
> condition etc.
>
> At present various different scripts (i.e. processes) just read the
> values using the I2C bus whenever they need to but I'm pretty sure
> this (quite rarely) results in false readings because two processes
> try to read at the same time.
>
> Thus I'm looking for ways to prevent simultaneous access.
>
> One fairly obvious way is to have single process/script which reads
> the A2D values continuously and writes them to a file.  All other
> scripts then read from the file as needed, a simple file lock can then
> be used to prevent simultaneous access (well, simultaneous access when
> the writing process is writing).
>
> Is this the simplest approach?  Are there better ways using
> multiprocess?  (They look more complicated though).
>
> The I2C bus itself has a mutex but I don't think this guarantees that
> (for example) an A2D reading is atomic because one reading takes more
> than one I2C bus access.
>
> Would a mutex of some sort around each I2C transaction (i.e. complete
> A2D reading) be a better way to go?
>
> --
> Chris Green
> =C2=B7
> --
> https://mail.python.org/mailman/listinfo/python-list