【问题标题】:Parallelizing a program in Python [closed]在 Python 中并行化程序 [关闭]
【发布时间】:2016-05-29 13:58:12
【问题描述】:

我经常在 Python 中处理文本,但我对这门语言有点陌生,还不知道如何在 Py 中使用多线程。

我的用例如下:

  1. 生成文本 T_s 的单个生产者 P(数据库/XML)。
  2. T_s 中的每个文本都可以独立处理。处理后的文本构成 T_p 集。
  3. 结果集由单线程 S 写入文本文件/XML/数据库。

数据量巨大,所有的处理都无法保留内存中的当前数据。

我会按如下方式组织流程:

  1. Producer 将文本放入 Q_s 队列。
  2. 有一组工作人员和一个从队列中获取文本并在工作人员之间分发的经理。
  3. 每个工作人员将处理后的文本放入 Q_p。
  4. Sink 进程从 Q_p 读取处理后的文本并将其持久化。

除了所有 Producer 应该能够向管理器和接收器传达它已结束读取输入数据源的信息。

总结。到目前为止,我了解到,Py 中的每个典型任务都有一个不错的库/解决方案。我目前的任务有吗?

【问题讨论】:

标签: python multithreading


【解决方案1】:

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

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

注意:您可以与JoinableQueue 类交流状态。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2014-01-12
相关资源
最近更新 更多