受围棋启发的频道

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

实现细节

待写。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Android Java在活动之间传递值   java当实体中存在关系时,我可以只使用实体的id而不是从DB中获取实体吗?   bouncycastle Java运行SSHD服务器错误未找到类定义   java SWT/Swing>Threads n'Hell   java多线程数据库读取   java如何在Eclipse中轻松提交Git   java在哪里可以找到字符串相等比较的一组特定排序规则?   无连接表的java单向单域关系   java扩展三角文件   java spring。杰克逊。序列化。failonemptybeans   java无法加载请求的类:oracle。jdbc。驾驶员OracleDriver   java通过数组进行索引循环并打印出元素?   找不到eclipse错误类中的java提交Hadoop作业   Java:随机设定种子   java片段、异步任务和侦听器   java在分号后使用{}