受围棋启发的频道
channelp的Python项目详细描述
受Go启发的频道的基本实现。
使用这些通道跨python线程、进程或 主机,独立于网络位置。频道是一流的 可以通过通道自身传递的对象。
当前实现使用RabbitMQ作为代理,但它可以 被其他队列甚至对等传输机制交换 例如ZeroMQ。见the implementation details。
先决条件
通过在 此存储库的根目录:
docker-compose up -d
快速启动
使用以下命令创建频道:
>>>fromchannelpyimportChannel>>>ch=Channel()
在频道之间放置和获取对象:
>>>ch.put('foo')>>>ch.get()'foo'>>>ch.get(timeout=1)# raises ChannelTimeoutException since channel is empty
将频道传送到频道:
>>>ch1=Channel()>>>ch1.put(5)>>>ch2=Channel()>>>ch2.put(ch1)>>>x=ch2.get()>>>x.get()5
频道可以按名称实例化:
>>>ch=Channel()>>>ch.name'daa0a490f9254c69883335c9f925d74f'>>>another=Channel(name=ch.name)>>>another.put('foo')>>>ch.get()'foo'
或使用特定名称创建它们:
>>>ch=Channel(name='my_channel')
多个消费者和生产者可以附加到 频道。信息以循环方式传递给 消费者。但是,close_all可以传递给 消费者发出完全终止频道的信号。
>>>ch=Channel()>>>deff(c):...whileTrue:...print(c.get())...>>>threading.Thread(target=f,args=(ch,)).start()>>>threading.Thread(target=f,args=(ch,)).start()>>>ch.put(4)# one of the threads will print 4>>>ch.close_all()# ChannelClosedException is raised in all threads
要使用的代理可以在实例化时配置,也可以通过 使用配置文件~/.channelpy.yml。例如:
connection:RabbitConnectionuri:amqp://192.168.35.10:5672
测试
使用以下命令运行测试:
$ BROKER='amqp://localhost:5672' py.test -v
实现细节
待写。