【问题标题】:Communicate between two python app在两个 python 应用程序之间进行通信
【发布时间】:2016-10-05 22:44:09
【问题描述】:

我做了两个应用:

  1. 第一个是从网站中提取所有链接的蜘蛛。
  2. 第二个对第一个应用发送的每个链接进行一些检查。

当第一个应用找到链接时,如何向第二个应用发送通知或其他内容?
第二个应用必须不断监听第一个应用发送的数据。

我发现很少有帖子提到Queue,但我不太明白它是如何工作的。

谁能用一个简单的例子解释一下如何在两个应用程序之间进行通信?

谢谢

【问题讨论】:

标签: python multithreading python-2.7 queue


【解决方案1】:

您希望将一个文件保存为“模块”以供另一个文件导入。这里可以使用import 关键字来实现。例如,如果您将应用程序的第二部分命名为listener.py,您可以在另一个文件中输入import listener(记得将它们放在同一个文件夹中!)并从第二个文件调用任何方法。 You can read more on Python modules here.

【讨论】:

【解决方案2】:

实现进程间通信的方法有很多种,但目前最简单的是使用文件系统。让您的蜘蛛将其输出写入临时文件。完成后,将其移动到您的第二个进程定期轮询的文件夹中,当它找到工作时,然后处理它。

spider 可能喜欢这样的东西:

import tempfile, os
tmpname = ''
with tempfile.NamedTemporaryFile(delete=False) as tmp:
    tmpname = tmp.name
    tmp.write("spider output....\n")
tgt = os.path.join('incoming', os.path.basename(tmpname))
os.rename(tmpname, tgt)

第二个过程可能如下所示:

import time, os
while 1:
    time.sleep(5)
    for item in os.listdir('incoming'):
        work_item = os.path.join('incoming', item)
        with open(work_item) as fin:
            # do something with item
        os.unlink(work_item)

【讨论】:

    【解决方案3】:

    Queue 只是一个可以放入和检索项目的容器,通常按FIFO 的顺序。 Python 2 中的Queue 模块只是支持同步访问的一个实现,这意味着它支持多个线程同时使用它(放置和获取东西)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2011-08-03
      • 2013-02-24
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多