python创建多线程每个线程处理多个任务_python中的多线程:实例指引(二)

本文介绍了如何使用ZeroMQ在Python和Node.js之间创建多线程和多进程通信,实现任务的分布式处理。通过示例展示了Node.js客户端向Python服务发送请求,Python作为代理和工作进程进行负载平衡。文章还探讨了不同语言间的通信可能性以及Python中利用ZeroMQ进行负载均衡的策略,并给出了具体的代码示例。
摘要由CSDN通过智能技术生成

6.2 ZeroMQ多进程和混合语言编程

使用ZeroMQ的一个最大的好处是我们可以用不同的语言来写不同的进程。这样我们就可以部署一个node.js写的进程发消息来向用python写的进程发消息和请求服务。

在这个例子中,我们使用ZeroMQ来实现(至少)以下两点:我们将在一种语言中执行用另一种不同语言写的代码。在下面的示例代码,我们用JavaScript/Node.js写的客户端向用python写的代码请求服务。这样我们就可以有一个方法请求可用的服务。如:Lxml XML包和SciPy和Numpy数值计算和科学计算软件包.

我们将启动多个服务进程或工人进程,无论是什么,都可以平衡负载。这应该有助于提高负荷下的吞吐量,同时避免了Python GIL(全局解释器锁),只允许一个线程在任意时刻执行python代码的问题。(更多与这个相关的问题的内容请查看:https://wiki.python.org/moin/GlobalInterpreterLock)

调试--提示你当然可以在python代码中使用print语句来跟踪执行过程。

根据你的代码结构,你可以考虑使用装饰器,这样就可以跟踪被装饰函数的输入和输出了。你可以在这里找到有关装饰器的帮助文档:http://www.davekuhlman.org/python_book_01.html#decorators-and-how-to-implement-them.

python调试器pdb很好用。事实上,我通常使用pdb(https://pypi.python.org/pypi/ipdb),你需要在一个单独的窗口或者会话来运行这个模块,这样调试命令和输出结果就不会混在一起了。

6.2.1 简单的轮循负载分布

在我们的例子中,node.js模块以ZeroMQ消息形式将多个请求发送给代理,然后把他们一起传送给工人模块,如果我们启动了多个工人进程,这些请求就会继续向前传送,轮转式的给其他工人进程。

以下就是我们的node.js客户端:

f17a453fb4d977aacc67dca249b241b9.png

58df4830d9830a661daf025320715bab.png

以下是python代理,就是客户和工人们之间的中间人一样:

b6777ff61f5648b34b73545b39983bb7.png

最后,这是实际使用Lxml提供处理XML功能的Python的工人进程:

0810501fa5988cd7c102ff92d5d4da95.png

5b193858602523cce05e755daafb1539.png

提示:如果启动了那样的多个node.js进程,上面的代码也是可以处理的。

我已经用node.js和python写了这个例子,但是我们同样可以使用ZeroMQ进行不同语言之间的通讯。支持ZeroMQ的语言有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值