Go-like features for Python
Project description
Package golang provides Go-like features for Python:
go spawns lightweight thread.
chan and select provide channels with Go semantic.
method allows to define methods separate from class.
gimport allows to import python modules by full path in a Go workspace.
Goroutines and channels
go spawns a thread, or a coroutine if gevent was activated. It is possible to exchange data in between either threads or coroutines via channels. chan creates a new channel with Go semantic - either synchronous or buffered. Use chan.recv, chan.send and chan.close for communication. select can be used to multiplex on several channels. For example:
ch1 = chan() # synchronous channel ch2 = chan(3) # channel with buffer of size 3 def _(): ch1.send('a') ch2.send('b') go(_) ch1.recv() # will give 'a' ch2.recv_() # will give ('b', True) _, _rx = select( ch1.recv, # 0 ch2.recv_, # 1 (ch2.send, obj2), # 2 default, # 3 ) if _ == 0: # _rx is what was received from ch1 ... if _ == 1: # _rx is (rx, ok) of what was received from ch2 ... if _ == 2: # we know obj2 was sent to ch2 ... if _ == 3: # default case ...
Methods
method decorator allows to define methods separate from class.
For example:
@method(MyClass) def my_method(self, ...): ...
will define MyClass.my_method().
Import
gimport provides way to import python modules by full path in a Go workspace.
For example
lonet = gimport('lab.nexedi.com/kirr/go123/xnet/lonet')
will import either
lab.nexedi.com/kirr/go123/xnet/lonet.py, or
lab.nexedi.com/kirr/go123/xnet/lonet/__init__.py
located in src/ under $GOPATH.
Pygolang change history
0.0.0.dev4 (2018-07-04)
Add py.bench program and golang.testing package with corresponding bits (commit).
py.bench allows to benchmark python code similarly to go test -bench and py.test. For example, running py.bench on the following code:
def bench_add(b): x, y = 1, 2 for i in xrange(b.N): x + y
gives something like:
$ py.bench --count=3 x.py ... pymod: bench_add.py Benchmarkadd 50000000 0.020 µs/op Benchmarkadd 50000000 0.020 µs/op Benchmarkadd 50000000 0.020 µs/op
0.0.0.dev3 (2018-07-02)
0.0.0.dev2 (2018-06-20)
Turn into full pygolang: go, chan, select, method and gcompat.qq are provided in addition to gimport (commit). The implementation is not very fast, but should be working correctly including select - select sends for synchronous channels.
0.0.0.dev1 (2018-05-21)
Initial release; gimport functionality only (commit).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pygolang-0.0.0.dev4.tar.gz
.
File metadata
- Download URL: pygolang-0.0.0.dev4.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9e0853525c76ec9ed5755e6f96b3edfa36cb3186aad3d4e7fe3b73af5739969 |
|
MD5 | 14e5c81e07f2ed1866712db029c7bb37 |
|
BLAKE2b-256 | 59a2cb450972961b01feb071902932628e40767e4512b617f39f939fe2025eb0 |