0

我一直在尝试解决以下问题的各种解决方案;无济于事。

我有大量(python)模块/脚本和一个杰出的脚本 K.py 。

当 K.py 执行时,它会生成一些信息,比如国家名称。现在,在其他模块(数百个)中,将有一些模块可以使用由 K.py 生成的信息(在本例中为国家名称)作为输入传递给它们来执行。递归地,上面的每个模块都会生成一些信息(城镇名称、街道号码等),这些信息可以作为其他模块的输入,等等..这当然会导致执行脚本的二叉树..

需要注意的地方。

  • 上面的模块/脚本(数百个)可以独立运行(它们不会以任何方式相互依赖)
  • 当所有模块都完成执行时,我应该能够做出判断(运行的 K.py 必须阻塞,直到执行模块的触发二叉树被“加入”)。

  • 如果对于每个信息 I 和可运行脚本 S(即 S 可以以 I 作为输入运行),我决定创建一个新的线程,我最终可能会得到指数数量的线程(否?)

如何使用 python 线程(任何 API)“安全地”实现解决方案?(伪代码?)

提前感谢您的智慧。

4

1 回答 1

2

解决这个问题的常用方法是创建一个工作队列并将单个作业存储在那里。因此,您需要对应该由一个线程完成的工作进行某种编程表示。

如果你有,你可以使用提供“线程”池(参见 16.3.1.5.)和多线程队列来存储作业的多处理包。

现在每个进程都从队列中取出一个作业,执行它——可能会向队列中添加新作业——然后当它完成时执行下一个作业。当队列为空时,您就完成了。

请注意,这使用了 multiprocessing 包,因为至少在带有 GIL 的 CPython 中,多线程 python 程序仅在大 IO 或其他阻塞活动的情况下才有优势。

于 2011-07-17T12:37:00.350 回答