https://github.com/devlights/pylatch
This is CountDownLatch implementations for Python.
https://github.com/devlights/pylatch
library python python3
Last synced: about 2 months ago
JSON representation
This is CountDownLatch implementations for Python.
- Host: GitHub
- URL: https://github.com/devlights/pylatch
- Owner: devlights
- License: mit
- Created: 2018-05-24T02:23:14.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2018-05-25T02:39:14.000Z (about 7 years ago)
- Last Synced: 2025-02-12T08:58:43.790Z (4 months ago)
- Topics: library, python, python3
- Language: Python
- Size: 12.7 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pylatch
Java や C# に存在する CountDownLatch を Python で簡易実装したものです。(C# の場合は、 CountDownEvent がそれに当たる)
マルチスレッド版とマルチプロセス版があります。
どちらもクラス名は CountDownLatch です。
## 使い方 (マルチスレッド用)
利用するクラスは ```pylatch.threadlatch.CountDownLatch``` となります。
```python
>>> # ---------------------------------------------
>>> # スレッド処理で利用する場合
>>> # ---------------------------------------------
>>> import threading as th
>>> import pylatch.threadlatch as pl>>> latch = pl.CountDownLatch(2)
>>> th1 = th.Thread(target=lambda: latch.count_down())
>>> th2 = th.Thread(target=lambda: latch.count_down())>>> latch.count
2
>>> latch.await(timeout=1.0)
False>>> th1.start()
>>> th1.join()
>>> latch.count
1
>>> latch.await(timeout=1.0)
False>>> th2.start()
>>> th2.join()
>>> latch.count
0
>>> latch.await(timeout=1.0)
True
```## 使い方 (マルチプロセス用)
利用するクラスは ```pylatch.processlatch.CountDownLatch``` となります。
```python
>>> # ---------------------------------------------
>>> # マルチプロセス処理で利用する場合
>>> # ---------------------------------------------
>>> import multiprocessing as mp
>>> import pylatch.processlatch as pl>>> latch = pl.CountDownLatch(2)
>>> proc1 = mp.Process(target=pl.__for_doctest, args=(latch,))
>>> proc2 = mp.Process(target=pl.__for_doctest, args=(latch,))>>> latch.count
2
>>> latch.await(timeout=1.0)
False>>> proc1.start()
>>> proc1.join()
>>> latch.count
1
>>> latch.await(timeout=1.0)
False>>> proc2.start()
>>> proc2.join()
>>> latch.count
0
>>> latch.await(timeout=1.0)
True
```## テスト
```sh
$ python -m unittest
```# 参考情報
以下の情報を参考にさせていただきました。
- [Does Python have a similar control mechanism to Java's CountDownLatch?
](https://stackoverflow.com/questions/10236947/does-python-have-a-similar-control-mechanism-to-javas-countdownlatch)
- [Python で Java の CountDownLatch を実装してみる](https://qiita.com/shinkiro/items/75f3561d6bc96694ce30)