用Python并行化程序

用Python并行化程序,python,multithreading,gil,Python,Multithreading,Gil,我经常使用Python编写文本,但我对该语言还是有点陌生,还不知道如何在Py中使用多线程 我的用例如下所示: 单一生产者P(数据库/XML),生成文本T_ 每一篇课文都可以独立处理。经过处理的文本构成T_p集 结果集由单个线程写入文本文件/XML/数据库 数据量巨大,所有的处理都无法在内存中保留除当前数据之外的任何内容 我将按以下方式组织该过程: 制作人将文本放入Q_的队列中 有一组worker和一个manager,它们从队列中获取文本并在worker之间分发 每个工作人员将处理后的文本放入Q\

我经常使用Python编写文本,但我对该语言还是有点陌生,还不知道如何在Py中使用多线程

我的用例如下所示:

  • 单一生产者P(数据库/XML),生成文本T_
  • 每一篇课文都可以独立处理。经过处理的文本构成T_p集
  • 结果集由单个线程写入文本文件/XML/数据库
  • 数据量巨大,所有的处理都无法在内存中保留除当前数据之外的任何内容

    我将按以下方式组织该过程:

  • 制作人将文本放入Q_的队列中
  • 有一组worker和一个manager,它们从队列中获取文本并在worker之间分发
  • 每个工作人员将处理后的文本放入Q\p
  • Sink进程从Q_p读取处理过的文本并将其持久化
  • 除此之外,生产者应该能够传达它已结束向管理器和接收器读取输入数据源的信息


    总结。到目前为止,我了解到Py中的每个典型任务都有一个很好的库/解决方案。我当前的任务是否有可用的线程?

    由于CPython的特性(请参阅),如果任务是CPU而不是I/O绑定的,则需要使用多个进程而不是线程。Python附带的模块具有完成工作所需的一切。具体来说,它具有安全性和线程安全性

    在您的情况下,您需要一个输入和输出队列,您将其传递给每个工作者,他们从输入队列异步读取并写入输出队列。单线程生产者/消费者只在各自的队列上操作,只在内存中保留必要的内容。这里唯一的潜在怪癖是输出顺序可能与输入顺序不相关


    注意:您可以与类通信状态。

    由于CPython的性质(请参阅),如果您的任务是CPU而不是I/O绑定的,则需要使用多个进程而不是线程。Python附带的模块具有完成工作所需的一切。具体来说,它具有安全性和线程安全性

    在您的情况下,您需要一个输入和输出队列,您将其传递给每个工作者,他们从输入队列异步读取并写入输出队列。单线程生产者/消费者只在各自的队列上操作,只在内存中保留必要的内容。这里唯一的潜在怪癖是输出顺序可能与输入顺序不相关


    注意:您可以与班级交流状态。

    Google在“python工作者线程-生产者-消费者howto”上给出了很好的结果,包括例如Google在“python工作者线程-生产者-消费者howto”上给出了很好的结果,包括例如,非常感谢您强调了我可能会错过的关键方面。找到了一本关于使用多线程模块做我想做的事情的入门书:非常感谢您突出了关键方面,我可能会错过这些。找到了一本关于如何使用多线程模块的入门书: