代码之家  ›  专栏  ›  技术社区  ›  daniels

python线程/fork?

  •  4
  • daniels  · 技术社区  · 15 年前

    我正在编写一个python脚本,它需要同时执行3个操作。 对于我听说的关于gil的事情,有什么好方法可以做到这一点呢?我不再那么倾向于使用线程了。
    脚本需要做的事情中有2件将是非常活跃的,它们将有很多工作要做,然后我需要让第三件事情在用户询问其他2个进程的状态时通过套接字向其报告(因此它将像一个小型服务器)。
    现在我的问题是,什么是实现这一目标的好方法?我不想有三种不同的脚本,而且由于gil使用线程,我想我不会得到太多的性能,我会使事情变得更糟。
    是否有一个fork()for python(类似于c-so中的fork()for my script-so-fork 2进程,将执行它们的任务)以及从主进程向用户报告?我如何从分叉流程与主流程进行通信?

    乐: :更准确地说,1线程应该从IMAP服务器获取电子邮件并将其存储到数据库中,另一个线程应该从需要发送的DB获取消息,然后发送它们,主线程应该是一个小的HTTP服务器,它只接受一个URL,并以JSON格式显示这两个线程的状态。那么线程可以吗?工作是同时进行还是由于GIL的原因会出现性能问题?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Pedro Ghilardi    15 年前

    我想你可以用 multiprocessing 具有类似于线程包的API的包,它允许您在单个CPU上使用多个内核获得更好的性能。

    要使用多处理而不是线程来查看性能的提高,请选中 this link 关于使用多处理X线程的同一程序的平均时间比较。

        2
  •  2
  •   Lennart Regebro    15 年前

    如果您想进行多处理(即将负载分散到多个核/处理器上),那么gil实际上只是需要关心的事情。如果是这样的话,并且从您的描述中听起来有点像,那么使用多处理。

    如果您只需要“同时”做三件事,这样您就需要在后台等待事情发生,那么线程就可以了。这就是线程的初衷。8-1页)