Giter Club home page Giter Club logo

asyncio-cancel-token's Introduction

asyncio-cancel-token

Join the chat at https://gitter.im/ethereum/asyncio-cancel-token Build Status PyPI version Python versions Docs build

Task cancellation pattern for asyncio applications.

Read more in the documentation on ReadTheDocs. View the change log.

Quickstart

pip install asyncio-cancel-token

Developer Setup

If you would like to hack on asyncio-cancel-token, please check out the Ethereum Development Tactical Manual for information on how we do:

  • Testing
  • Pull Requests
  • Code Style
  • Documentation

Development Environment Setup

You can set up your dev environment with:

git clone [email protected]:ethereum/asyncio-cancel-token.git
cd asyncio-cancel-token
virtualenv -p python3 venv
. venv/bin/activate
pip install -e .[dev]

Testing Setup

During development, you might like to have tests run on every file save.

Show flake8 errors on file change:

# Test flake8
when-changed -v -s -r -1 cancel_token/ tests/ -c "clear; flake8 cancel_token tests && echo 'flake8 success' || echo 'error'"

Run multi-process tests in one command, but without color:

# in the project root:
pytest --numprocesses=4 --looponfail --maxfail=1
# the same thing, succinctly:
pytest -n 4 -f --maxfail=1

Run in one thread, with color and desktop notifications:

cd venv
ptw --onfail "notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on asyncio-cancel-token failed'" ../tests ../cancel_token

Release setup

For Debian-like systems:

apt install pandoc

To release a new version:

make release bump=$$VERSION_PART_TO_BUMP$$

How to bumpversion

The version format for this repo is {major}.{minor}.{patch} for stable, and {major}.{minor}.{patch}-{stage}.{devnum} for unstable (stage can be alpha or beta).

To issue the next version in line, specify which part to bump, like make release bump=minor or make release bump=devnum.

If you are in a beta version, make release bump=stage will switch to a stable.

To issue an unstable version when the current version is stable, specify the new version explicitly, like make release bump="--new-version 4.0.0-alpha.1 devnum"

asyncio-cancel-token's People

Contributors

carver avatar cburgdorf avatar glaksmono avatar gsalgado avatar hiteshramani avatar hwwhww avatar jannikluhn avatar mneedham91 avatar njgheorghita avatar pipermerriam avatar veox avatar williambannas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

asyncio-cancel-token's Issues

Token chaining API is error prone

Also, this might indicate that we need to do something to fix the cancel token chaining API because honestly, I've had trouble sometimes figuring out what the right order should be. Maybe we need something like token.create_child_token() rather than actually combining two tokens and thus, having to figure out the right ordering.

(From ethereum/py-evm#1234 (comment))

Another thing that is problematic and may need to be redesigned (or at least documented), is the fact that sometimes a class will keep a direct reference to the token passed to its constructor (e.g. https://github.com/ethereum/py-evm/blob/master/trinity/protocol/common/managers.py#L200 and https://github.com/ethereum/py-evm/blob/master/trinity/p2p/handlers.py#L33), which means they will cancel their parents if they ever trigger their tokens. Even though some of those may never actually trigger their tokens (e.g. when they only use the token to detect when their parent has terminated), they could still pass these tokens to other classes that eventually do trigger them

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.